论坛首页 入门技术论坛

设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1

浏览 6218 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-12-01   最后修改:2010-12-01
public class ThreadIncDec {

	private int j;

	public static void main(String[] args) {
		ThreadIncDec incDec = new ThreadIncDec();
		Inc inc = incDec.new Inc();
		Dec dec = incDec.new Dec();
		for (int i = 0; i < 2; i++) {
			Thread t = new Thread(inc);
			t.start();
			t = new Thread(dec);
			t.start();
		}
	}
	
	//计数加一
	private synchronized void inc() {
		j++;
		System.out.println(Thread.currentThread().getName() + "-inc:" + j);
	}

	//计数减一
	private synchronized void dec() {
		j--;
		System.out.println(Thread.currentThread().getName() + "-dec:" + j);
	}

	//内部类实现的线程,线程对计数器加一
	class Inc implements Runnable {
		public void run() {
			for (int i = 0; i < 100; i++) {
				inc();
			}
		}
	}

	//内部类实现的线程,线程对计数器减一
	class Dec implements Runnable {
		public void run() {
			for (int i = 0; i < 100; i++) {
				dec();
			}
		}
	}
}

下一篇关于java字符串反转
   发表时间:2010-12-02  
靠同步去加减,应该算是最基本也是最慢的方法了吧。

实际使用的时候考虑一下concurrent包的那堆原子数吧
0 请登录后投票
   发表时间:2010-12-02  
IcyFenix 写道
靠同步去加减,应该算是最基本也是最慢的方法了吧。

实际使用的时候考虑一下concurrent包的那堆原子数吧

是的,最近正在研究,所以只发了最简单的,谢谢
0 请登录后投票
   发表时间:2010-12-02  
atomInteger
0 请登录后投票
   发表时间:2010-12-02  
coreymylife 写道
atomInteger

正解.不用你同步,api帮你搞定.
0 请登录后投票
   发表时间:2010-12-02  
i2534 写道
coreymylife 写道
atomInteger

正解.不用你同步,api帮你搞定.

这个还真没用过,谢谢,马上研究一下
0 请登录后投票
   发表时间:2010-12-02  
coreymylife 写道
atomInteger

正解且是最好最简便方法!!!
0 请登录后投票
   发表时间:2010-12-02  
似乎是Thinking in Java里的一个例子。。。
0 请登录后投票
   发表时间:2010-12-02  
bbflys 写道
似乎是Thinking in Java里的一个例子。。。

这个是我去一家公司的笔试题,好长时间没看过Think in java了
0 请登录后投票
   发表时间:2010-12-02  
spring5365 写道
bbflys 写道
似乎是Thinking in Java里的一个例子。。。

这个是我去一家公司的笔试题,好长时间没看过Think in java了


如果没错,应该是华为吧!我记得我去的时候,他的题目一摸一样。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics