对多
线程方面一直只限概念,感觉用到的不多,所以没深入去了解。但
发现面试时却经常会问到,于是便想了一个简单的题目,亲自实践下。题目如下:
由2个线程控制主线程的一个变量,一个调用加的方法,一个调用减的方法,要求变量值不能小于0(如果等于0,则减的方法必须等待)。一个典型的有货才卖的类型
,由于新手,所以捣鼓了好久,终于成功了,下面是代码,不知道有什么能改进的。
*以下是经过修改的代码:
class="java" name="code">
public class ThreadTest {
/**
* @param args
*/
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
Thread t3 = new Thread(new MinusThread(t));
Thread t2 = new Thread(new MinusThread(t));
Thread t1 = new Thread(new AddThread(t));
t1.start();
t2.start();
t3.start();
}
static int num = 0;
public synchronized void add() {
while(num >= 10)
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
num++;
System.out.println("num+1="+num);
}
public synchronized void minus() {
while(num <= 0)
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
num--;
System.out.println("num-1="+num);
}
public synchronized void change(int type) {
if(type==0) {
num++;
System.out.println("num+1="+num);
} else {
while(num <= 0)
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
num--;
System.out.println("num-1="+num);
}
}
}
class AddThread implements Runnable {
ThreadTest t;
public AddThread (ThreadTest t) {
this.t = t;
}
public void run() {
int i = 100;
while(i-->0) {
synchronized (t) {
t.add();
t.notify();
}
}
}
}
class MinusThread implements Runnable {
ThreadTest t;
public MinusThread (ThreadTest t) {
this.t = t;
}
public void run() {
int i = 100;
while(i-->0) {
synchronized (t) {
t.minus();
t.notify();
}
}
}
}