java学习笔记之线程4
来源:互联网 发布:特价机票 知乎 编辑:程序博客网 时间:2024/06/05 06:11
在前两篇博客中都用到了Synchronized,但它在程序中并没有发挥什么作用,在这片文章中,我们就让它正真起作用
上两篇博客中synchronized是为什么不能起作用呢??
直接说原因吧:在同一时刻,被synchronized修饰的非静态方法是可以被不同对象访问的。因为非static方法属于对象,有多份,同一时刻可以有多个对象去访问它,不存在资源争夺的问题。而static方法属于类,也叫类方法,它随着类的加载而跟着在内中存在,只有一份,在同一时刻只能有一个对象去访问它
继续对程序做改进:把睡觉和写博客的线程单独封装在了doSomething方法中,然后让run方法去调用它,而且doSomething这个方法是被synchronized修饰的静态方法
多次执行结果如下:
或
达到了同步执行的效果
至于两件事的先后顺序,是因为当他们都处于Runnable状态的时候都有可能被cpu调度执行,在下一篇文章中会写到怎么去控制这两个线程去按先后顺序同步执行
写到这里,大家应该对被synchronized修饰的方法的用法有一点理解了,这里我们来总结一下:
1,synchronized修饰非静态方法:
因为该方法属于对象,随着对象的创建而跟着存在。
所以该方法在同一时刻被不同对象访问时不存在互斥的情况,可以被多个对象同时访问。但同一时刻同一对象不能再访问该方法
2,synchronized修饰静态方法:
静态方法属于类的,存在方法区中只有一份。
该方法在同一时刻只能被一个对象访问
再来看第三种用法:静态块
直接上代码吧
执行结果:
执行效果和同步静态方法的效果一样,也达到了同步控制的效果
但是大家注意了在声明lock的时候应该把它声明为类属性:
private static Object lock = new Object();
锁的知识之后再写,反正这儿保证只有一个lock就行,不然也不能得到同步执行的结果
下一篇博客写synchronized修饰类,以及让同步执行的代码再按顺序执行
这是线程5的链接
这是线程5的链接
- java学习笔记之线程4
- java学习之线程笔记
- java学习之线程笔记
- java学习笔记之线程
- Java学习笔记之线程
- Java学习笔记之线程
- Java线程学习笔记之线程简介
- Java线程学习笔记之线程同步
- Java学习笔记之线程的生命周期
- Java学习笔记之线程的控制
- java学习笔记之线程并发库
- Java线程学习笔记之Executor
- java 多线程学习笔记之 线程中断
- java 多线程学习笔记之 线程同步
- java学习笔记之线程操作方法总结
- Java学习笔记之进程和线程
- Java学习笔记之线程池
- Java线程学习笔记之Lock
- 第一章:Eclipse用Maven搭建SSM框架并部署到Tomcat7
- python3中bytes和string之间的互相转换
- Optimizing Unity UI
- MySql创建序列
- OBD-II接口引脚定义
- java学习笔记之线程4
- Android状态栏的沉浸设置
- idea创建maven项目步骤《基于eclipse的maven项目》
- 编程填空:第i位替换
- java 输入流 next()-----nextline()
- HIVE beeline使用shell 批量执行sql语句
- strtol,strtoll,strtoul, strtoull字符串转化成数字
- Error LNK1201:error writing to program database "xxx.pdb"
- 使用redis实现分布式锁