多线程的面试题~~~~~~~~~~~~~~~~~~~~~~~~~

yqbboy 发布于 2013/01/14 20:57
阅读 754
收藏 0
 四个线程,两个线程每次对j加1,两个线程每次对j减1.
要求四个线程共享;线程写到内部类中。 
加载中
0
hunterli
hunterli
把j声明为原子类,搞定。
0
excepiton
excepiton
没要求加减顺序,难度不大。难道有一些陷阱???
0
yqbboy
yqbboy
能帮忙具体写一下吗?
0
王凯1981
王凯1981
楼主看看是不是这个意思
public class InterView {

	private static AtomicLong j = new AtomicLong(0l);

	private static class Work extends Thread {
		private boolean positive;

		public Work(boolean positive) {
			this.positive = positive;
		}

		@Override
		public void run() {
			try {
				while (true) {
					if (positive) {
						j.incrementAndGet();
						Thread.sleep(500);
					} else {
						j.decrementAndGet();
						Thread.sleep(600);
					}
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		int num = 4;
		for (int i = 0; i < num; i++) {
			boolean positive = i % 2 == 0;
			Work work = new Work(positive);
			work.start();
		}

		while (true) {
			try {
				System.out.println(j);
				Thread.sleep(200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

0
爱吃大肉包
爱吃大肉包

1,使用atomic

2,同步锁

3,自己用CAS做

0
中山野鬼
中山野鬼
看完最后几个字,我彻底败了。哈哈。。。。。
返回顶部
顶部