java多线程实现两个线程对数据加1,两个线程对数据减1

代码如下:

两个加的线程实现数据共享不能同时操作数据

两个减的线程实现数据共享不能同时操作数据

加线程和减线程能同时操作

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

......

你可能感兴趣的:(java多线程实现两个线程对数据加1,两个线程对数据减1)