标签: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