线程和Runnable接口的理解

通过卖票来进行解释:
1.ThreadTicket.java:
public static void main(String[] args) {
		// sell1();
		sell2();

	}

	public static void sell2() {
		MyRunnable mt = new MyRunnable();
		new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一
		new Thread(mt).start();// 个实例化对象mt,就会出现异常
		new Thread(mt).start();
	}

	public static void sell1() {
		MyThread mt1 = new MyThread();
		MyThread mt2 = new MyThread();
		MyThread mt3 = new MyThread();
		mt1.start();// 每个线程都各卖了10张,共卖了30张票
		mt2.start();// 但实际只有10张票,每个线程都卖自己的票
		mt3.start();// 没有达到资源共享
	}



2.MyThread.java:
public class MyThread extends Thread {
	private int ticket = 10;

	public void run() {
		for (int i = 0; i < 20; i++) {
			if (this.ticket > 0) {
				System.out.println("卖票:ticket" + this.ticket--);
			}
		}
	}
}



3.MyRunnable.java:

public class MyRunnable implements Runnable {

	private int ticket = 10;

	@Override
	public void run() {
		for (int i = 0; i < 20; i++) {
			if (this.ticket > 0) {
				System.out.println("卖票:ticket" + this.ticket--);
			}
		}
	}
}



你可能感兴趣的:(java,thread)