java synchronized
来源:互联网 发布:淘宝格子铺怎么样 编辑:程序博客网 时间:2024/06/07 10:00
互斥操作应该写在资源里,这样无论是任何线程访问这个资源,都不会产生问题,也不用每个线程都重写互斥代码
synchronized
可以用来修饰函数,也可用来修饰代码块
无论修饰什么,里面都包含一把锁对象,如果想要两个线程互斥,
必须保证他们在执行关键字囊括的代码时,得到的必须是同一把锁,
否则则不能达到互斥操作
修饰函数:
1、修饰静态函数:锁就是指代的当前对象this
2、修饰普通函数:锁就是指代的本类的字节码对象,即:类名.class
修饰代码块:
你可以传递任何对象作为锁对象,但是必须保证互斥线程间的锁是相同的,
非互斥线程之间的锁是不同的
// 互斥资源class Resources{public void print(String name){// 锁对象为name,若是多个互斥线程传过来的name不是同一对象,则不会互斥synchronized (name) {int len = name.length();for(int i=0;i<len;i++){System.out.print(name.charAt(i));}System.out.println();}}/** Resources r1 = new Resources() * Resources r2 = new Resources() * 锁对象为this,即当前对象,对于访问同一资源对象(r1)的多个线程,是互斥的, * 对于访问不同资源(r1和r2等)的多个线程,是不互斥的 */public synchronized void print1(String name){for (int i = 0; i < name.length(); i++) {System.out.print(name.charAt(i));}System.out.println();}// 锁对象为Resources类的字节码对象,独一无二,只此一份,所有线程执行这段代码,都会互斥// 只要有线程访问它,都会互斥public synchronized static void print3(String name){for (int i = 0; i < name.length(); i++) {System.out.print(name.charAt(i));}System.out.println();}}
1 0
- Java synchronized
- Java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- Java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- Java synchronized
- Java synchronized
- Java synchronized
- The file “XXX.app” couldn’t be opened because you don’t have permission to view it.
- 关于SVM支持向量机的学习
- 动态规划-满减优惠
- zcmu1461
- ex4.py
- java synchronized
- Android开发人员不得不收集的代码
- poj 1936 All in All
- $.post和String转流时引起乱码及解决办法
- 一. 开始 Xcode 7 编程之旅
- ex5.py
- Android 开发最佳实践
- Python os模块os.system()返回值在windows和linux平台上不同
- 排序检索-156 Ananagrams-待处理问题为char** p、 char (*p) [n]、char *p[n]的异同