代码如下:
两个加的线程实现数据共享不能同时操作数据
两个减的线程实现数据共享不能同时操作数据
加线程和减线程能同时操作
package com.tan.test313.homework.thread;
/**
* 试编写程序实现 4个线程, 其中两个线程每次对j增加1, 另外两个线程对j每次减少1。
*
* @use
* @author tanyouhao
* @date 2013-3-13 下午7:28:36
* @version 1.0
*
*/
public class FourThread implements Runnable {
private int j;
public FourThread(int j) {
super();
this.j = j;
}
@Override
public void run() {
while (true) {
//注意:如果发synchronzied方到这里,那么四个方法将进行同步,即 不能同时操作j
//如果按照下面的 则加和减可以同时进行,两个减或者加不能同时进行
if (Thread.currentThread().getName().indexOf("加") >= 0) {
synchronized (this) {
if (j < 50) {
add();
}
}
} else if (Thread.currentThread().getName().indexOf("减") >= 0) {
synchronized (this) {
if (j > 0) {
minus();
}
}
}
}
}
public void add() {
j++;
System.out.println(Thread.currentThread().getName() + ":" + j);
}
public void minus() {
j--;
System.out.println(Thread.currentThread().getName() + ":" + j);
}
public static void main(String args[]) {
FourThread ft = new FourThread(25);
new Thread(ft, "1号加线程").start();
//new Thread(ft, "2号加线程").start();
new Thread(ft, "1号减线程").start();
//new Thread(ft, "2号减线程").start();
}
}
运行结果:
......
1号加线程:44
1号加线程:45
1号加线程:46
1号加线程:47
1号加线程:48
1号加线程:49
1号加线程:50
1号减线程:49
1号减线程:48
1号减线程:47
1号减线程:46
1号减线程:45
1号减线程:44
1号减线程:43
......