标签:
synchronized关键字
方法或代码块的互斥性来完成实际上的一个原子操作。(方法或代码块在被一个线程调用时,其他线程处于等待状态)
所有的Java对象都有一个与synchronzied关联的监视器对象(monitor),允许线程在该监视器对象上进行加锁和解锁操作。
a、静态方法:Java类对应的Class类的对象所关联的监视器对象。
b、实例方法:当前对象实例所关联的监视器对象。
c、代码块:代码块声明中的对象所关联的监视器对象。
所以多线程操作同一个内容并要保持一致性时,就将该对象设为类的静态成员
public class syncTest { public static int count = 0; public static synchronized void addC(){ if(count <100){ count ++; System.out.println(Thread.currentThread().getName() +" "+count); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String args[]){ Thread thread1 = new Thread(); thread1 = new Thread(new Runnable(){ public void run(){ System.out.println("thread1 start run"); while(count <100){ syncTest.addC(); } } }); syncTest st = new syncTest(); Thread thread2 = new Thread(); thread2 = new Thread(new Runnable(){ public void run(){ System.out.println("thread2 start run"); while(count <100){ st.addC(); } } }); thread1.start(); thread2.start(); } }
输出:
可以看到,两个线程操作的是同一个数
标签:
原文地址:http://www.cnblogs.com/zxahu/p/4641145.html