问题:有三个线程,其中两个每秒执行j+1,第三个线程每秒执行j-2。实现代码:
package arithmetic;
public class ThreadTest {
private static int j = 0;
public static void main(String[] args) {
Object object = new Object();
Thread t1 = new Thread(new AddThread(object),"t1线程");
Thread t2 = new Thread(new AddThread(object),"t2线程");
Thread t3 = new Thread(new SubThread(object),"t3线程");
t1.start();
t2.start();
t3.start();
}
public static class AddThread implements Runnable{
private Object obj;
private AddThread(Object object){
this.obj = object;
}
@Override
public void run() {
synchronized (obj){
while(true){
try {
obj.wait(1000);
j++;
System.out.println(Thread.currentThread().getName()+"加一,当前j="+j
+ " 时间为:"+System.currentTimeMillis());
//obj.notifyAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public static class SubThread implements Runnable{
private Object obj;
private SubThread(Object object){
this.obj = object;
}
@Override
public void run() {
synchronized (obj){
while(true){
try {
obj.wait(1000);
j-=2;
System.out.println(Thread.currentThread().getName()+"减二,当前j="+j +
" 时间为:"+System.currentTimeMillis());
//obj.notifyAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
执行结果:
t2线程加一,当前j=1 时间为:1537098141897
t1线程加一,当前j=2 时间为:1537098141897
t3线程减二,当前j=0 时间为:1537098141897
t2线程加一,当前j=1 时间为:1537098142903
t3线程减二,当前j=-1 时间为:1537098142903
t1线程加一,当前j=0 时间为:1537098142903
t3线程减二,当前j=-2 时间为:1537098143905
t1线程加一,当前j=-1 时间为:1537098143905
t2线程加一,当前j=0 时间为:1537098143905
t3线程减二,当前j=-2 时间为:1537098144922
t1线程加一,当前j=-1 时间为:1537098144922
t2线程加一,当前j=0 时间为:1537098144922
t3线程减二,当前j=-2 时间为:1537098145934
t1线程加一,当前j=-1 时间为:1537098145934
t2线程加一,当前j=0 时间为:1537098145934
t1线程加一,当前j=1 时间为:1537098146936
t2线程加一,当前j=2 时间为:1537098146936
t3线程减二,当前j=0 时间为:1537098146936
t3线程减二,当前j=-2 时间为:1537098147950
t1线程加一,当前j=-1 时间为:1537098147950
t2线程加一,当前j=0 时间为:1537098147950
t2线程加一,当前j=1 时间为:1537098148951
t1线程加一,当前j=2 时间为:1537098148951
t3线程减二,当前j=0 时间为:1537098148951
t2线程加一,当前j=1 时间为:1537098149952
t1线程加一,当前j=2 时间为:1537098149952
t3线程减二,当前j=0 时间为:1537098149952
t2线程加一,当前j=1 时间为:1537098150953
t1线程加一,当前j=2 时间为:1537098150953
t3线程减二,当前j=0 时间为:1537098150953
......