Java 多线程 之 interrupt中断 线程实例
http://www.verejava.com/?id=16992936743871
package com.interrupt;
/*
题目: 人们在火车站的售票窗口排队买火车票
1. 北京西站开门
2. 打开售票窗口
3. 北京西站有10张去长沙的票
4. 打开2个售票窗口,
5 假设每个售票窗口每隔1秒钟买完一张票
1. 根据 名词 找类
人们(Person), 火车站(Station),火车票(Ticket) , 售票窗口e 是火车站的线程
*/
import java.util.*;
public class TestTrain
{
public static void main(String[] args)
{
//火车西站开门
Station station=new Station("火车西站");
//开窗口
//Thread win1=station.openWindow("普通窗口");
Thread win2=station.openWindow("学生窗口");
//窗口1 开始售票
//设置线程优先级 setPriority()
//win2.setPriority(Thread.MAX_PRIORITY);
//win1.start();
win2.start();
try
{
Thread.sleep(2000);//2 妙的时候 线程停止 stop()
win2.interrupt(); //打断线程
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class Station implements Runnable
{
private String name;//火车站的名称
private String[] persons={"赵海洋","王锐","宋沙","李欣伟","徐文晓","孟令强","王大卫","李宝琴","王浩"};// 火车站排队 买票的人
private int i=-1;
public Station(String name)
{
super();
this.name = name;
}
/*
打开售票窗口 学生窗口,普通窗口,军人窗口
售票窗口 是线程 Thread
*/
public Thread openWindow(String name)
{
return new Thread(this,name);
}
/*
火车站售票
*/
public void sale()
{
try
{
while(i<persons.length-1)
{
i++;
String person=persons[i];
System.out.println(person+" "+Thread.currentThread().getName()+" 买了一张北京到上海的火车票");
Thread.sleep(2000);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public void run()
{
//开始售票
sale();
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}