线程和Runnable接口的理解

通过卖票来进行解释:
1.ThreadTicket.java:
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();// 没有达到资源共享  
    } 

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:
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--);  
            }  
        }  
    }  


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:
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--);  
            }  
        }  
    }  

你可能感兴趣的:(Runnable)