【JAVA核心知识】17.1:线程间变量共享
变量共享是进行线程间通信的常用手段之一,java的内存模型(JMM)解决了可见性和有序性,我们则可以通过线程锁保证原子性。
有变量:
class ShareData { int num = 0; public synchronized void inrc() { num++; } public synchronized void desc() { num--; } }
常用的变量共享手段有:
继承Runnable将变量作为成员变量
public static void main(String[] args) { ShareData shareData = new ShareData(); InrcRunnable incrRun = new InrcRunnable(shareData); DescRunnable descRun = new DescRunnable(shareData); new Thread(incrRun).start(); new Thread(descRun).start(); } class InrcRunnable implements Runnable { ShareData shareData; public InrcRunnable(ShareData shareData) { this.shareData = shareData; } @Override public void run() { shareData.inrc(); } } class DescRunnable implements Runnable { ShareData shareData; public DescRunnable(ShareData shareData) { this.shareData = shareData; } @Override public void run() { shareData.desc(); } }
将变量定义为final直接访问
public static void main(String[] args) { final ShareData shareData = new ShareData(); new Thread(new Runnable() { @Override public void run() { shareData.inrc(); } }).start(); new Thread(new Runnable() { @Override public void run() { shareData.desc(); } }).start(); }
jdk1.8不再需要添加final修饰符,这是因为该版本的jdk会隐式的为这些变量添加final修饰词。
上一篇:
通过多线程提高代码的执行效率例子