标签:ble 其他 exce monitor ring 实例 rgs lock start
1.线程锁的三种方法,举例
package cn.itcast.thread.sync;
/**
*
* @author Administrator
* 对对象的实例加锁
*/
public class SyncThread implements Runnable {
//创建实例
static SyncThread instance=new SyncThread();
static int i=0;
public void run() {
// TODO Auto-generated method stub
for (int j = 0; j < 100000; j++) {
/*
*
* 方法一:
* synchronized (instance) {
i++;
}*/
//对方法上锁
increase();
}
}
//方法二:加在方法上,如果不是static修饰的 ,要确保是同一个锁才能保证同步的进行,用static修饰的是方法三
private synchronized void increase() {
// TODO Auto-generated method stub
i++; //对成员变量的操作要加上锁
System.out.println(Thread.currentThread().getName()+"----------------"+i);
}
public static void main(String[] args) {
Thread t1=new Thread(instance);
Thread t2=new Thread(instance);
Thread t3=new Thread(instance);
t1.start();t2.start();t3.start();
try {
t1.join();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("-----------最后的结果:"+i);
}
}
2.object.wait()
//代码需要写在锁中
//线程一
synchronized(object){ //锁既是监听器
object.wait(); //此句会使得当前线程等待,且释放监视器的所有权,等待被其他线程唤醒且释放了monitor之后
}
//线程二:
synchronized(object){ //锁既是监听器
object.notify(); //此句会唤醒一个等待的线程,
}
标签:ble 其他 exce monitor ring 实例 rgs lock start
原文地址:https://www.cnblogs.com/xiayuer0114/p/9802195.html