大神帮我看看自己写的多线程哪里出了问题

来源:5-1 总结及展望

Juneava

2016-11-20 12:37

主要功能是两个线程操作一个变量,一个让它+1,一个让它-1然后交替输出

public class Res {
	private boolean flag = true;
	private int x = 1;

	public synchronized void print1() {
		if (!flag) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println(x++);
		flag = false;
		this.notify();

	}

	public synchronized void print2() {

		if (flag) {
		}
		try {
			this.wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		System.out.println(x--);
		flag = true;
		this.notify();
	}

}
public class PrintOne implements Runnable{
	private Res r;
	public PrintOne(Res r){
		this.r=r;
	}
public void run(){
	while(true){
		r.print1();
	}
}
}
public class PrintTwo implements Runnable{
	private Res r;
	public PrintTwo(Res r){
		this.r=r;
	}
public void run(){
	while(true){
		r.print2();
	}
}
}
public class Test {
	public static void main(String[] args) {
		Res r=new Res();
		new Thread(new PrintOne(r)).start();
		new Thread(new PrintTwo(r)).start();
	}

}

运行结果就是输出一个1,就停住了,哪里死锁了还是全部等待了

写回答 关注

1回答

  • 喜欢柯南的小小学徒
    2016-11-20 16:37:00
    已采纳

    你的print2方法里,wait方法没有在if分支里。

    Juneav...

    哦哦,老是犯低级错误!感谢指导!看的真仔细!

    2016-11-20 17:54:58

    共 1 条回复 >

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186088 学习 · 464 问题

查看课程

相似问题