Thread:



class MyThread extends Thread
{
private int ticketsCont=5; //一共有5张火车票

private String name; //窗口, 也即是线程的名字

public MyThread(String name){
this.name=name;
}

@Override
public void run(){

while(ticketsCont>0){
ticketsCont--; //如果还有票,就卖掉一张票
System.out.println(name+"卖掉了1张票,剩余票数为:"+ticketsCont);
}

}
}

public class TicketsThread
{
public static void main(String args[]){

//创建三个线程,模拟三个窗口卖票
MyThread mt1=new MyThread("窗口1");
MyThread mt2=new MyThread("窗口2");
MyThread mt3=new MyThread("窗口3");

//启动三个线程,也即是窗口,开始卖票
mt1.start();
mt2.start();
mt3.start();

}
}


Java 多线程Thread和Runnable_创建线程Java 多线程Thread和Runnable_ide_02


窗口1卖掉了1张票,剩余票数为:4
窗口1卖掉了1张票,剩余票数为:3
窗口1卖掉了1张票,剩余票数为:2
窗口1卖掉了1张票,剩余票数为:1
窗口1卖掉了1张票,剩余票数为:0
窗口3卖掉了1张票,剩余票数为:4
窗口2卖掉了1张票,剩余票数为:4
窗口3卖掉了1张票,剩余票数为:3
窗口3卖掉了1张票,剩余票数为:2
窗口3卖掉了1张票,剩余票数为:1
窗口3卖掉了1张票,剩余票数为:0
窗口2卖掉了1张票,剩余票数为:3
窗口2卖掉了1张票,剩余票数为:2
窗口2卖掉了1张票,剩余票数为:1
窗口2卖掉了1张票,剩余票数为:0

View Code

Runnable接口:



class MyThread2 implements Runnable
{
private int ticketsCont=5; //一共有5张火车票

@Override
public void run(){
while(true){
synchronized(this){
if(ticketsCont<=0){
break;
}
ticketsCont--; //如果还有票,就卖掉一张票

System.out.println(Thread.currentThread().getName()+"卖掉了1张票,剩余票数为:"+ticketsCont);

/*try{
Thread.sleep(50); //通过阻塞程序来查看效果
}
catch(Exception e){
System.out.println(e);
}*/
}
}

}
}

public class TicketsRunnable
{
public static void main(String args[]){

MyThread2 mt=new MyThread2();
//创建三个线程来模拟三个售票窗口
Thread th1=new Thread(mt,"窗口1");
Thread th2=new Thread(mt,"窗口2");
Thread th3=new Thread(mt,"窗口3");

//启动三个线程,也即是三个窗口,开始卖票
th1.start();
th2.start();
th3.start();
}
}


Java 多线程Thread和Runnable_创建线程Java 多线程Thread和Runnable_ide_02


窗口1卖掉了1张票,剩余票数为:4
窗口1卖掉了1张票,剩余票数为:3
窗口1卖掉了1张票,剩余票数为:2
窗口1卖掉了1张票,剩余票数为:1
窗口1卖掉了1张票,剩余票数为:0

View Code

修改MyThread2



class MyThread2 implements Runnable
{
private int ticketsCont=5; //一共有5张火车票
@Override
public void run() {
while (true) {
if (ticketsCont <= 0) {
break;
}
ticketsCont--; //如果还有票,就卖掉一张票
System.out.println(Thread.currentThread().getName() + "卖掉了1张票,剩余票数为:" + ticketsCont);
}
}
}


Java 多线程Thread和Runnable_创建线程Java 多线程Thread和Runnable_ide_02


窗口1卖掉了1张票,剩余票数为:3
窗口3卖掉了1张票,剩余票数为:2
窗口2卖掉了1张票,剩余票数为:3
窗口3卖掉了1张票,剩余票数为:0
窗口1卖掉了1张票,剩余票数为:1

View Code

Thread类是多个线程分别完成自己的任务,Runnable是多个线程共同完成一个任务。

建议使用Runnable这种方式创建线程。 程序中的同一资源指的是同一个Runnable对象。安全的卖票程序中需要加入同步synchronized。