synchronized在java中的修饰

我们说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
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容