当一个线程进入一个对象的synchronized() 方法后,其他线程是否可以进入此对象的其他方法
来源:互联网 发布:软件板块指数 编辑:程序博客网 时间:2024/05/02 01:50
当一个线程进入一个对象的synchronized() 方法后,其他线程是否可以进入此对象的其他方法?
1、其他方法generalMethod() 没有加入synchronized修饰符
<span style="font-size:18px;">package thread;public class Test {public synchronized void synchronizedMethod(){System.out.println("begin calling synchronizedMethod");try{Thread.sleep(5000);}catch(InterruptedException e){e.printStackTrace();}System.out.println("finish calling synchronizedMethod");}public void generalMethod(){System.out.println("calling generalMethod");}}</span>
<span style="font-size:18px;">package thread;public class MultiThread {static final Test t = new Test();public static void main(String[] args) {// TODO Auto-generated method stubThread t1 = new Thread(){public void run(){t.synchronizedMethod();}};Thread t2 = new Thread(){public void run(){t.generalMethod();}};t1.start();t2.start();}}</span>结果:
begin calling synchronizedMethod
calling generalMethod
finish calling synchronizedMethod
结论:当一个线程进入一个对象多个一个synchronize()方法后,其他线程是否可以进入该对象的其他方法取决于方法本身,如果该方法是非synchronized()方法,那么是可以访问的。
2、其他方法generalMethod() 加入synchronized修饰符
<span style="font-size:18px;">package thread;public class Test {public synchronized void synchronizedMethod(){System.out.println("begin calling synchronizedMethod");try{Thread.sleep(5000);}catch(InterruptedException e){e.printStackTrace();}System.out.println("finish calling synchronizedMethod");}public synchronized void generalMethod(){System.out.println("calling generalMethod");}}</span>结果:
begin calling synchronizedMethod
finish calling synchronizedMethod
calling generalMethod
结论:当一个线程进入一个对象多个一个synchronize()方法后,其他线程是否可以进入该对象的其他方法取决于方法本身,如果该方法是synchronized()方法,那么是不可以访问的。
3、其他方法generalMethod() 加入synchronized static 修饰符
<span style="font-size:18px;">package thread;public class Test {public synchronized void synchronizedMethod(){System.out.println("begin calling synchronizedMethod");try{Thread.sleep(5000);}catch(InterruptedException e){e.printStackTrace();}System.out.println("finish calling synchronizedMethod");}public synchronized static void generalMethod(){System.out.println("calling generalMethod");}}</span>结果:
begin calling synchronizedMethod
calling generalMethod
finish calling synchronizedMethod
结论:如果其他方法是静态方法,它用的同步锁是当前类的字节码,与非晶态的方法不能同步(因为非静态的方法用的是this),因此,静态方法可以被调用
0 0
- 当一个线程进入一个对象的synchronized() 方法后,其他线程是否可以进入此对象的其他方法
- 当一个线程进入一个对象的一个synchronized方法后,其他线程是否可以进此对象的其他方法?
- 当一个线程进入一个对象的一个synchronized()方法后,其他线程是否可进入此对象的其他方法?
- 当一个线程进入一个对象的一个synchronized方法后,其他线程是否可进入此对象的其他方法?
- 当一个线程进入对象的synchronized方法后,其它线程是否可进入此对象的其它方法?
- 笔试:当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? ?(2nd)
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法
- 当一个线程进入一个对象的一个synchronized( )方法后,其它线程是否可进入此对象的其它方法
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? ?
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? ?(2nd)
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- BZOJ1024
- DF Engine Export 无法到处到数据库
- ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ----
- hdu oj 1849 Rabbit and Grass
- Codeforces #316 DIV2
- 当一个线程进入一个对象的synchronized() 方法后,其他线程是否可以进入此对象的其他方法
- Xcode6制作静态链接库和framework
- java动态代理的两种方式---jdk和cglib
- CodeForces 245C Game with Coins
- Android中定时器的3种实现方法
- 【二十三】Wireshark抓取安卓APP包
- PAT 1033. To Fill or Not to Fill (25)
- 开发常用工具
- p型血