我们说synchronized让一个线程运行时,保证其安全性。那么在其中synchronized都可以进行哪些操作呢?本篇主要讲的是synchronized的修饰用法,能够对普通方法、静态方法、代码块进行操作。下面将分别对这三种修饰情况,带来代码方面的用法展示,一起来看看synchronized的修饰用法吧。
1.修饰普通方法
publicclassSynTest8implementsRunnable{ publicstaticvoidmain(String[]args)throwsInterruptedException{ SynTest8instance1=newSynTest8(); Threadthread1=newThread(instance1); thread1.start(); } @Override publicvoidrun(){ if(Thread.currentThread().getName().equals("Thread-0")){ method1(); }else{ method2(); } } publicsynchronizedvoidmethod1(){ try{ System.out.println(Thread.currentThread().getName()+"进入到了同步方法1"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName()+"离开同步方法1"); }catch(InterruptedExceptione){ e.printStackTrace(); } } publicsynchronizedvoidmethod2(){ try{ System.out.println(Thread.currentThread().getName()+"进入到了同步方法2"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName()+"离开同步方法2"); }catch(InterruptedExceptione){ e.printStackTrace(); } } }
2.修饰静态方法
publicclassSynTest6implementsRunnable{ publicstaticvoidmain(String[]args)throwsInterruptedException{ SynTest6instance1=newSynTest6(); SynTest6instance2=newSynTest6(); Threadthread1=newThread(instance1); Threadthread2=newThread(instance2); thread1.start(); thread2.start(); } @Override publicvoidrun(){ method1(); } publicsynchronizedstaticvoidmethod1(){ try{ System.out.println(Thread.currentThread().getName()+"进入到了静态方法"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName()+"离开静态方法,并释放锁"); }catch(InterruptedExceptione){ e.printStackTrace(); } } }
在这个例子中我们实例化了两个对象instance1和instance2,并且存放在了两个不同的线程中,我们测试一下访问同一个static同步方法你会发现。即使是实例不同,锁也会生效,也就是同一时刻只能有一个线程进去。
3.修饰代码块
一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞。
/** *同步线程 */ classSyncThreadimplementsRunnable{ privatestaticintcount; publicSyncThread(){ count=0; } publicvoidrun(){ synchronized(this){ for(inti=0;i<5;i++){ try{ System.out.println(Thread.currentThread().getName()+":"+(count++)); Thread.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); } } } } publicintgetCount(){ returncount; } }
原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容