1. 程式人生 > >兩種方式實現多執行緒共享資源(典型的售票例子)

兩種方式實現多執行緒共享資源(典型的售票例子)

1、繼承Thread

TestThread類

public class TestThread extends Thread{
	private  int ticket = 300;
	@Override
	public void run() {
		while(true){
			try {
				Thread.sleep(10);
			} catch (Exception e) {
				e.printStackTrace();
			}
			sale();
			if(ticket <= 0)
				break;
		}
	}
	
	public synchronized void sale(){
		if(ticket > 0){
			System.out.println(Thread.currentThread().getName() +"-->"+ ticket--);
		}
	}

}

2、Runable介面

TestRunable類

package mytestthread;

public class TestRunable implements Runnable{
	public int tic = 300;
	
	@Override
	public void run() {
		
		while(true){
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			sale();
			if(tic <= 0)
				break;
		}
	}
	
	public synchronized void sale(){

		if(tic > 0){
			System.out.println(Thread.currentThread().getName() + "--" + tic--);
		}
	}

}
3、main函式
package mytestthread;

public class MyThead{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		/*TestRunable t1 = new TestRunable();
		Thread thread1 = new Thread(t1, "te1");
		Thread thread2 = new Thread(t1, "te2");
		Thread thread3 = new Thread(t1, "te3");
		Thread thread4 = new Thread(t1, "te4");
		
		thread1.start();
		thread2.start();
		thread3.start();
		thread4.start();*/
		
		TestThread t = new TestThread();
		Thread aa =new Thread(t,"aa");
		Thread bb =new Thread(t,"bb");
		Thread cc =new Thread(t,"cc");
		aa.start();
		bb.start();
		cc.start();
	}

}

看了幾篇文章感覺沒達到資源共享的目的,資源共享需要synchronized鎖,並且需要同一個物件才有效。