博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多线程锁的学习总结
阅读量:5944 次
发布时间:2019-06-19

本文共 1491 字,大约阅读时间需要 4 分钟。

hot3.png

    从别人的文章里偷来一句话,感觉蛮经典的:多线程的同步依靠的是锁机制,java中可通过synchronized关键字锁锁住共享资源以实现异步多线程的达到同步。

    总结起来,要达到同步,我们要做的就是构造各线程间的共享资源,其中的共享资源可以对象,也可以是方法

    学习过程中整的一个多线程实现同步的Demo:

package com.jd.test.demo;public class LockDemo {	public static void main(String[] args) {		MyRunnerVarLock runnerVarLock = new MyRunnerVarLock(new Integer(0));		MyRunnerFuncLock runnerFuncLock = new MyRunnerFuncLock();		MyRunnerNoLock runnerNoLock = new MyRunnerNoLock(); 				// 对共享对象进行加锁,线程会依次打印0-99的数,每一次运行的结果都一样		for(int i = 0; i < 10; i++) {			Thread thread = new Thread(runnerVarLock);			thread.start();		}				// 对共享函数进行加锁,线程会依次打印0-99的数,每一次运行的结果都一样		for(int i = 0; i < 10; i++) {			Thread thread = new Thread(runnerFuncLock);			thread.start();		}				// 未加锁,会因为线程调用的时序不同而发生变化,每一次运行的结果不一定相同		for(int i = 0; i < 10; i++) {			Thread thread = new Thread(runnerNoLock);			thread.start();		}	}}// 对共享对象进行加锁class MyRunnerVarLock implements Runnable {	private Object lock;	public MyRunnerVarLock(Object lock) {		this.lock = lock;	}	public void run() {		synchronized (lock) {			for (int i = 0; i < 100; i++) {				System.out.println("Lock: " + i);			}		}	}}// 对共享函数进行加锁class MyRunnerFuncLock implements Runnable {	public synchronized void run() {		for (int i = 0; i < 100; i++) {			System.out.println("Func lock: " + i);		}	}}// 没有加锁class MyRunnerNoLock implements Runnable {	public void run() {		for (int i = 0; i < 100; i++) {			System.out.println("No lock: " + i);		}	}}
    哈哈,有点水,不得深解,能用万岁^_^!!!!

转载于:https://my.oschina.net/u/656588/blog/148256

你可能感兴趣的文章
linux安全---cacti+ntop监控
查看>>
鸟哥的linux私房菜-shell简单学习-1
查看>>
nagios配置监控的一些思路和工作流程
查看>>
通讯组基本管理任务三
查看>>
赫夫曼编码实现
查看>>
html页面显示div源代码
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
wdcp 安装
查看>>
快递查询接口的调用与解析案例
查看>>
服务器性能优化配置建议
查看>>
oracle sql语句实现累加、累减、累乘、累除
查看>>
3D地图的定时高亮和点击事件(基于echarts)
查看>>
接口由40秒到200ms优化记录
查看>>
java 视频播放 多人及时弹幕技术 代码生成器 websocket springmvc mybatis SSM
查看>>
Activiti6.0,spring5,SSM,工作流引擎,OA
查看>>
第十三章:SpringCloud Config Client的配置
查看>>
使用 GPUImage 实现一个简单相机
查看>>
CoinWhiteBook:区块链在慈善事业中的应用
查看>>
Mac上基于Github搭建Hexo博客
查看>>
阿里云服务器ECS开放8080端口
查看>>