当前位置: 技术问答>java相关
关于线程同步。
来源: 互联网 发布时间:2015-07-29
本文导语: 见以下的注释: class ThreadA { 2. public static void main(String [] args) { 3. ThreadB b = new ThreadB(); 4. b.start(); 5. 6. synchronized(b) {//问题一:此前如果20句开始起作用,ThreadA将无法进入接下去的同步代码块,ThreadA被挂起,...
见以下的注释:
class ThreadA {
2. public static void main(String [] args) {
3. ThreadB b = new ThreadB();
4. b.start();
5.
6. synchronized(b) {//问题一:此前如果20句开始起作用,ThreadA将无法进入接下去的同步代码块,ThreadA被挂起,对吗?
7. try {
8. System.out.println("Waiting for b to complete...");
9. b.wait();//问题二:是否此时线程ThreadA释放对b的锁,所以ThreadA被挂起,ThreadB运行对吗?奇怪,b.wait()的意思不是让b(也就是ThreadB)等待吗?怎么会让反而ThreadA被挂起?
10. } catch (InterruptedException e) {}
11. }
12. System.out.println("Total is: " + b.total);
13. }
14. }
15.
16. class ThreadB extends Thread {
17. int total;
18.
19. public void run() {
20. synchronized(this) {
21. for(int i=0;i
class ThreadA {
2. public static void main(String [] args) {
3. ThreadB b = new ThreadB();
4. b.start();
5.
6. synchronized(b) {//问题一:此前如果20句开始起作用,ThreadA将无法进入接下去的同步代码块,ThreadA被挂起,对吗?
7. try {
8. System.out.println("Waiting for b to complete...");
9. b.wait();//问题二:是否此时线程ThreadA释放对b的锁,所以ThreadA被挂起,ThreadB运行对吗?奇怪,b.wait()的意思不是让b(也就是ThreadB)等待吗?怎么会让反而ThreadA被挂起?
10. } catch (InterruptedException e) {}
11. }
12. System.out.println("Total is: " + b.total);
13. }
14. }
15.
16. class ThreadB extends Thread {
17. int total;
18.
19. public void run() {
20. synchronized(this) {
21. for(int i=0;i