您的位置:首页 > 编程语言 > Java开发

Java-synchronized的用法

2016-01-04 16:47 405 查看
当N个并发线程访问同一个对象中的以synchronized修饰的代码块或者方法时,在同一时间内,只允许有一个线程执行该方法,其他线程必须等待,当【该方法】结束时(注意:不是【该线程】结束时,我看过其他朋友的博客,有说该线程结束是,这是不对的),其他线程才有机会执行这个方法

--------------------------类1--------------------------
public class User{
public synchronized void gogogo(String s){
for(int i=0;i<1000;i++){
System.out.println(s+"GOGOGOGOGO");
}
}
}

--------------------------类2--------------------------
class Runnab implements Runnable{
public User u;
public String s;
public void run(){
//while(true){注释掉注释掉注释掉注释掉
u.gogogo(s);
//}注释掉注释掉注释掉注释掉注释掉
}
}
-------------------------测试类1--------------------------
public class ThreadAndRunnable {
public static void main(String[] args) {

User u=new User();//同一个对象
//线程1
Runnab r1=new Runnab();
r1.u=u;
r1.s="线程1:";
Thread thread1 = new Thread(r1);
//线程2
Runnab r2=new Runnab();
r2.u=u;
r2.s="线程2:";
Thread thread2 = new Thread(r2);
//启动线程
thread1.start();
thread2.start();
}

}


分别测试打开类2中的注释和不打开类2中的注释,从打印出结果可以知道:在同一时间内,只允许有一个线程执行该方法,其他线程必须等待,当【该方法】结束时,其他线程才有机会执行这个方法,而不是【该线程】结束时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: