1。synchronized 方法控制对类成员变量的访问:synchronized方法
public synchronized void accessVal(int newVal){}
2。synchronized代码块控制对类的静态成员变量的访问。
synchronized(syncObject) {
//允许访问控制的代码
}
synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。
notify()及notifyAll()是Object的方法,与Object的wait()方法配合使用,而且这三个方法必须在同步块中调用.
如下:
在线程1中执行如下代码
Java代码
...
synchronized(obj1) //1.进入同步块
{
try {
...
obj1.wait(); //2.进入暂停状态
}catch (InterruptedException exp) {}
}
...
synchronized(obj1) //1.进入同步块
{
try {
...
obj1.wait(); //2.进入暂停状态
}catch (InterruptedException exp) {}
}
1.当前同步对象(monitor)为obj1,obj1是任一实例,若是同步方法,则同步对象是this。进入同步块后,obj1为锁定状态,锁定状态对obj1本身无任何影响,而其它线程执行到同一代码时,因不能获得锁,处于Block状态,一旦解锁,被block的线程自动继续执行。
2.调用obj1.wait()有两个作用,一是使线程进入等待状态,二是解锁obj1。这时被block的线程将获得锁,线程1要退出等待必须要由其它线程显式的调用obj1.notify()或notifyAll()方法。
如
Java代码
...
synchronized(obj1)
{
...
obj1.notify(); //3. 向wait的线程发通知信息
...
}
...
...
synchronized(obj1)
{
...
obj1.notify(); //3. 向wait的线程发通知信息
...
}
...若其它线程执行到此时,线程1处于wait状态,则wait状态解除,解除后,线程1若得到锁就能继续执行,若有多个线程处于obj1的wait状态,notify将随机选一个线程激活,而notifyAll是同时解除所有的wait状态。
notifyAll() 让等待某个对象K的所有线程离开阻塞状态,
notify() 随机地选取等待某个对象K的线程,让它离开阻塞状态。
分享到:
相关推荐
java中synchronized用法
java同步synchronized关键字用法示例
java里面synchronized用法
synchronized关键字在java中的重要性 以及常用的方法 还有它的详解
Synchronized关键字的用法
java多线程编程核心技术synchronized实例大全,同步方法,同步语句块,类锁,对象锁全都用代码来展现出来
java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com
synchronized是很重要的,但是不少人不是很明白synchronized的用法,这里有详细的doc文档给大家参考
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧
主要介绍了Java中syncronized正确使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
NULL 博文链接:https://seandsky-boyy-163-com.iteye.com/blog/1340783
该内容是在暮课网学习的课程比较,讲解synchronized的原理和用法,以及常见的面试题。上传网上以供自己以后复习。
在 Java 5 以前,synchronized 是仅有的同步手段,在代码中, synchronized 可以用来修饰方法,也可以使用在特定的代码块儿上,本质上
讲解了锁的两种特性,互斥和可见;volatile和synchronize的用法和区别
synchronized下的方法控制多线程程序中的线程同步非常方便,这里就来看一下Java使用synchronized修饰方法来同步线程的实例演示,需要的朋友可以参考下
基于Synchronized加锁的四个demo,主要反映类锁、对象锁、方法锁的使用方法。 并测试不同类型锁之间的有效关系。
Lock接口与synchronized关键字在Java并发编程中都是用于实现同步机制的重要工具,但它们在使用方式、功能特性以及灵活性等方面存在一些显著的差异。 首先,从使用方式上来看,synchronized是Java语言内置的关键字,...
从语法上讲,Synchronized总共有三种用法: (1)修饰普通方法 (2)修饰静态方法 (3)修饰代码块 接下来我通过几个例子程序来说明一下这三种使用方式(为了便于比较,三段代码除了Synchronized的使用...
主要介绍了PHP pthreads v3下同步处理synchronized用法,结合实例形式分析了PHP pthreads v3下同步处理synchronized原理、使用方法及相关操作注意事项,需要的朋友可以参考下
(此代码不能运行,因为很多c++中的机制在java中不能实现)此代码仅用于学习synchronized的过程,从看了synchronized的源码后,根据c++中synchronized进行java手写。以MySynchronized类的monitorEnter方法为加锁入口,...