题目
设计4 个线程,其中两个线程每次对j 增加1,另两个线程对j 每次减少1;写出程序。
1.思路:
1.根据题意,要保证他们操作同一个j;所以可以操作同一个实例变量;(并且保证后续四个线程使用同一把锁);
2.首先要创建四个线程;使用实现runnable接口的方式;两个想线程调用增加方法;两个调用减少方法;
3.要保证四个线程共同操作一个实例变量(题目隐含条件,肯定不能乱,要一个线程一个线程的操作);
那么,使用synchronized修饰方法(synchronized修饰普通方法,相当于锁this,这里四个线程操作同一个对象,则是同一把锁),即可保证四个线程的同步(同一时间只能有一个执行);
2.代码实现:
public class TestThread2 {
public static void main(String[] args) {
Operj operj=new Operj();
//第一个增加线程
new Thread(()->{
for (int i = 0; i < 500; i++) {
operj.increase();
}
},"增加线程1:").start();
//第二个增加线程
new Thread(()->{
for (int i = 0; i < 500; i++) {
operj.increase();
}
},"增加线程2:").start();
//第一个减少线程
new Thread(()->{
for (int i = 0; i < 500; i++) {
operj.decrease();
}
},"减少线程1:").start();
//第二个减少线程
new Thread(()->{
for (int i = 0; i < 500; i++) {
operj.decrease();
}
},"减少线程2:").start();
}
}
class Operj{
private int j;
//增加方法
public synchronized void increase() {
j++;
System.out.println(Thread.currentThread().getName()+j);
}
//减少方法
public synchronized void decrease() {
j--;
System.out.println(Thread.currentThread().getName()+j);
}
}