关于对synchronized的理解
2011-10-16 22:34
393 查看
当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
今天在论坛中看见这道题,开始也很模糊,最后写了个程序得出如下答案。
如果是同步方法的话是不可以的。
如果是非同步方法的话是可以的。
下面贴出代码:
定义ThreadDemo类 有三个方法metho1,method2,Print。
其中metho1,method2为同步方法。Print为非同步方法。
如果在主函数中只开启t1.start()和t2.start();则输出结果为
t1输出完后,t2在输出。所以如果是同步方法的话是不可以的。
如果在主函数中只开启t1.start()和t3.start();则输出结果为
t1,Print交替输出。所以如果是非同步方法的话是可以的。
---------------------- android培训、java培训、期待与您交流! ----------------------
今天在论坛中看见这道题,开始也很模糊,最后写了个程序得出如下答案。
如果是同步方法的话是不可以的。
如果是非同步方法的话是可以的。
下面贴出代码:
package Test; public class Test1 { public static void main(String[] args) { ThreadDemo threadDemo=new ThreadDemo(); Thread t1=new ThreadOne(threadDemo); Thread t2=new ThreadTwo(threadDemo); Thread t3=new ThreadThree(threadDemo); t1.start(); t2.start(); t3.start(); } } class ThreadDemo { public synchronized void method1() { for (int i = 0; i < 10; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("同步方法1"+" "+ i); } } public synchronized void method2() { for (int i = 0; i < 10; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("同步方法2"+" " + i); } } public void Print() { for (int i = 0; i < 10; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("非同步方法" + i); } } } class ThreadOne extends Thread { private ThreadDemo threadDemo; public ThreadOne(ThreadDemo threadDemo) { this.threadDemo = threadDemo; } public void run() { this.threadDemo.method1(); } } class ThreadTwo extends Thread { private ThreadDemo threadDemo; public ThreadTwo(ThreadDemo threadDemo) { this.threadDemo = threadDemo; } public void run() { this.threadDemo.method2(); } } class ThreadThree extends Thread { private ThreadDemo threadDemo; public ThreadThree(ThreadDemo threadDemo) { this.threadDemo = threadDemo; } public void run() { this.threadDemo.Print(); } }
定义ThreadDemo类 有三个方法metho1,method2,Print。
其中metho1,method2为同步方法。Print为非同步方法。
如果在主函数中只开启t1.start()和t2.start();则输出结果为
t1输出完后,t2在输出。所以如果是同步方法的话是不可以的。
如果在主函数中只开启t1.start()和t3.start();则输出结果为
t1,Print交替输出。所以如果是非同步方法的话是可以的。
---------------------- android培训、java培训、期待与您交流! ----------------------
相关文章推荐
- 关于java中的synchronized关键字的理解
- 关于java synchronized关键字的一些理解
- 关于对java中synchronized修饰同一个类的两个方法的理解
- 关于java的synchronized关键字,wait(),notify() 的例子,方便大家快速理解和应用。
- Java关于Synchronized关键字在不同位置使用的理解
- 关于synchronized,对象锁的理解
- Java关于Synchronized关键字在不同位置使用的理解
- 关于 @synchronized(self) 的理解
- 关于synchronized的理解记录
- 关于java中的synchronized关键字的理解
- callee,caller,call()以及apply()的用法理解以及从中引申出的关于作用域跟this的理解
- 关于apriori算法中置信度、支持度怎么理解的问题
- 关于javascript的回调函数与异步函数的关系理解
- 关于支持向量机中的函数距离和几何距离的理解
- 关于C的一些理解
- 关于伪静态的理解
- 关于前后台编码设置理解和web.xml编码过滤器CharacterEncodingFilter理解马克
- 关于多径效应,平坦衰落,频率选择性衰落以及瑞利衰落的理解
- 关于@synchronized(self)的用法
- 关于web前端的初步理解