(1)当访问共同的代码的时候:可以使用同一个Runnable对象,这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做。
public class MutiThreadShareData { public static void main(String[] args) { ShareData data=new ShareData(); new Thread(data).start(); new Thread(data).start(); } } class ShareData implements Runnable { private int count = 10000; @Override public void run() { while(true){ synchronized (this) { count--; }; System.out.println(Thread.currentThread().getName()+":"+count); } } }
(2)当各个线程访问的代码不同时:这时候需要使用不同的Runnable对象
public class MutiThreadShareData { public static void main(String[] args) { final ShareData data=new ShareData(); new Thread(new Runnable() { @Override public void run() { while(true){ data.increment(); } } }).start(); new Thread(new Runnable() { @Override public void run() { while(true){ data.decrement(); } } }).start(); } } class ShareData { private int j=2000; public synchronized void increment(){ j++; System.out.println(Thread.currentThread().getName()+":"+j); } public synchronized void decrement(){ j--; System.out.println(Thread.currentThread().getName()+":"+j); } }
参考文章:
http://my.oschina.net/u/248570/blog/53226
本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1693465