java synchronized线程同步

来源:互联网 发布:软件开发的公司 编辑:程序博客网 时间:2024/05/19 23:58

这个就相当于Qt5里面的 QMutex互斥量,在一个线程 使用一个公共资源之前 调用 mutex.lock(),锁住后只允许当前线程调用此资源 其余线程等待,然后 调用 mutex.unlock()解锁,解锁后大家都可以抢,然后又有一个锁定。。。

HanThread.java

package threadsafe;public class HanThread extends Thread{private static int i;static{i=0;}public static int getI(){return HanThread.i;}public  HanThread() {// TODO Auto-generated constructor stub}@Overridepublic void run() {// TODO Auto-generated method stubint i=0;while(i<10){HanThread.i=HanThread.i+1;Singleton.Printf();i++;}}}
Singleton.java

package threadsafe;public class Singleton {public static   void Printf(){   System.out.println("A");   System.out.println("b");   System.out.println("C");   System.out.println("D");   System.out.println("E");   System.out.println("F");   System.out.println("G");   System.out.println("H");   System.out.println("I");   System.out.println("J");   System.out.println("K");   System.out.println("L");   System.out.println(HanThread.getI());}}

HanEntity.java

package threadsafe;public class HanEntity {public static void main(String[] args){HanThread thread1=new HanThread();HanThread thread2=new HanThread();thread1.start();thread2.start();}}

运行结果:

AbCDEAbCDEFGHIJKL2AbCDEFGFGHIJKL3AbCDEFGHIJKL4AbCDEFGHIJKL5AbCDEFGHIJKL6AbCDEFGHHIJKL7AbCDEFGHIJKL8AbCDEFGHIJKL9AbCDEFGHIJKL10AbCDEFGHIJKL11AbCDEFGHIJKL12AbCDEFGHIJKL13AbCDEFGHIJKL14AbCDEFGHIJKL15AbCDEFGIJKL16AbCDEFGHIJKLHIJKL1717AbCDEFGHIJKL18AbCDEFGHIJKL19AbCDEFGHIJKL20
使用了 synchronized的版本

HanThread.java

package threadsafe;public class HanThread extends Thread{private static int i;static{i=0;}public static int getI(){return HanThread.i;}public  HanThread() {// TODO Auto-generated constructor stub}@Overridepublic void run() {// TODO Auto-generated method stubint i=0;while(i<10){HanThread.i=HanThread.i+1;Singleton.Printf();i++;}}}
Singleton.java


package threadsafe;public class Singleton {public static synchronized  void Printf(){   System.out.println("A");   System.out.println("b");   System.out.println("C");   System.out.println("D");   System.out.println("E");   System.out.println("F");   System.out.println("G");   System.out.println("H");   System.out.println("I");   System.out.println("J");   System.out.println("K");   System.out.println("L");   System.out.println(HanThread.getI());}}

HanEntity.java

package threadsafe;public class HanEntity {public static void main(String[] args){HanThread thread1=new HanThread();HanThread thread2=new HanThread();thread1.start();thread2.start();}}

运行结果:

AbCDEFGHIJKL2AbCDEFGHIJKL3AbCDEFGHIJKL4AbCDEFGHIJKL4AbCDEFGHIJKL5AbCDEFGHIJKL6AbCDEFGHIJKL8AbCDEFGHIJKL9AbCDEFGHIJKL10AbCDEFGHIJKL11AbCDEFGHIJKL12AbCDEFGHIJKL13AbCDEFGHIJKL14AbCDEFGHIJKL14AbCDEFGHIJKL15AbCDEFGHIJKL16AbCDEFGHIJKL17AbCDEFGHIJKL18AbCDEFGHIJKL19AbCDEFGHIJKL20




0 0