`
bcworld
  • 浏览: 37843 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

多线程实例

阅读更多

 

public class Class1 {
	public static void main(String args[]) {
		ShareData shareDate = new ShareData(50);
		Thread[] aThreadArray = new Thread[20];
		System.out.println("\t刚开始的值是:" + shareDate.getVal());
		System.out.println("\t多个线程正在工作,请稍等!");
		for (int i = 0; i < 20; i++) {
			int d = i % 2 == 0 ? 50 : -30;
			aThreadArray[i] = new Thread(new MyMultiThreadClass(shareDate, d));
			aThreadArray[i].start();
		}
		WhileLoop11: // 等待所有线程结束
		while (true) {
			for (int i = 0; i < 20; i++) {
				if (aThreadArray[i].isAlive()) {
					// System.out.println("if in");
					continue WhileLoop11;
				}
			}
			System.out.println("退出while循环");
			break;
		}
		System.out.println("\t最后的结果是: " + shareDate.getVal());
	}
}

class MyMultiThreadClass implements Runnable {
	ShareData useInteger;
	int delta;

	MyMultiThreadClass(ShareData mrc, int d) {
		useInteger = mrc;
		delta = d;
	}

	public void run() {
		for (int i = 0; i < 1000; i++) {
			useInteger.modifyData(delta);
			try {
				Thread.sleep(10);// 做一些其他的处理
			} catch (InterruptedException e) {
			}
		}
	}
}

class ShareData {
	int val;

	ShareData(int initValue) {
		val = initValue;
	}

	int getVal() {
		return val;
	}

	private void putVal(int v) {
		val = v;
	}
	//synchronized保证数据一致性
	synchronized void modifyData(int d) {
		putVal(getVal() + d);
	}
}

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics