终于完成了一个小小的java多线程_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 终于完成了一个小小的java多线程

终于完成了一个小小的java多线程

 2013/7/10 3:35:45  gegewuqin9  程序员俱乐部  我要评论(0)
  • 摘要:对多线程方面一直只限概念,感觉用到的不多,所以没深入去了解。但发现面试时却经常会问到,于是便想了一个简单的题目,亲自实践下。题目如下:由2个线程控制主线程的一个变量,一个调用加的方法,一个调用减的方法,要求变量值不能小于0(如果等于0,则减的方法必须等待)。一个典型的有货才卖的类型,由于新手,所以捣鼓了好久,终于成功了,下面是代码,不知道有什么能改进的。*以下是经过修改的代码:publicclassThreadTest{/***@paramargs*/publicstaticvoidmain
  • 标签:多线程 Java 一个 线程
对多线程方面一直只限概念,感觉用到的不多,所以没深入去了解。但发现面试时却经常会问到,于是便想了一个简单的题目,亲自实践下。题目如下:
由2个线程控制主线程的一个变量,一个调用加的方法,一个调用减的方法,要求变量值不能小于0(如果等于0,则减的方法必须等待)。一个典型的有货才卖的类型 ,由于新手,所以捣鼓了好久,终于成功了,下面是代码,不知道有什么能改进的。
*以下是经过修改的代码:
class="java" name="code">

public class ThreadTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ThreadTest t = new ThreadTest();
		Thread t3 = new Thread(new MinusThread(t));
		Thread t2 = new Thread(new MinusThread(t));
		Thread t1 = new Thread(new AddThread(t));
		t1.start();
		t2.start();
		t3.start();
	}
	
	
	static int num = 0;
	public synchronized void add() {
		while(num >= 10)
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		num++;
		System.out.println("num+1="+num);
	}
	
	public synchronized void minus() {
		while(num <= 0)
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		num--;
		System.out.println("num-1="+num);
	}
	
	public synchronized void change(int type) {
		if(type==0) {
			num++;
			System.out.println("num+1="+num);
		} else {
			while(num <= 0)
				try {
					this.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			num--;
			System.out.println("num-1="+num);
		}
	}
}

class AddThread implements Runnable {
	ThreadTest t;
	public AddThread (ThreadTest t) {
		this.t = t;
	}
	public void run() {
		int i = 100;
		while(i-->0) {
			synchronized (t) {
				t.add();
				t.notify();
			}
		}
	}
}

class MinusThread implements Runnable {
	ThreadTest t;
	public MinusThread (ThreadTest t) {
		this.t = t;
	}
	public void run() {
		int i = 100;
		while(i-->0) {
			synchronized (t) {
				t.minus();
				t.notify();
			}
		}
	}
}
发表评论
用户名: 匿名