标签:有序性 dex 工作 链接 之间 syn style .com sleep
参考链接:http://www.cnblogs.com/paddix/p/5374810.html
针对上述的问题:多线程一个5个特性:
1.共享性 2.互斥性 3.原子性 4.可见性 5.有序性
使用synchronized可以解决:1.确保线程互斥的访问同步代码 2.保证代码及时的可见3.有效解决重排问题。
首先看存在线程安全问题的代码:
public class SynchronizedTest { public static void main(String[] args){ OutPut out = new OutPut(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } out.output("aobama"); } }).start(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } out.output("luosifu"); } }).start(); } }
输出结果:
l u a o b a m o s i a f u
显然不对。我们尝试用synchronized来解决上述问题:
1.修饰方法(将共同调用的方法锁住):
public class OutPut { public synchronized void output(String name){ for(int i =0;i < name.length();i++){ System.out.print(name.charAt(i)+" "); } } }
输出结果是:
a o b a m a l u o s i f u
2.使用synchronized将需要互斥的代码包含起来,并上一把锁(注意:synchronized锁住的必须是多线程之间共有的)
public class OutPut { public void output(String name){ synchronized (this){ for(int i =0;i < name.length();i++){ System.out.print(name.charAt(i)+" "); } } } }
输出结果:
a o b a m a l u o s i f u
Synchronized详解:
标签:有序性 dex 工作 链接 之间 syn style .com sleep
原文地址:http://www.cnblogs.com/lfdingye/p/7355641.html