多线程调用与中断过程研究
一直以来,对多线程的理解都仅限书本知识,没有仔细研究过,这次做了个实验,对多线程有了一定的了解。下面是实验代码与结果。
[html]
public class MyRunTest implements Runnable {
private int ticket=5;//类的成员变量放在栈里面,因为只new了一个对象,所以三个线程共同操作这个变量。
@Override
public void run() {
for(int i=1;i<8;i++){ //因为run方法是线程体,i是每个线程所独立的栈保存,当CPU把当前线程中断,调用其他线程时,会保存当前线程的信息,等待下次调用时,继续执行。
System.out.println("线程"+Thread.currentThread().getId()+"被调用");
if(this.ticket>0){
System.out.println("线程"+Thread.currentThread().getId()+"准备减票数");
System.out.println("线程"+Thread.currentThread().getId()+"卖出:ticket "+ticket--);
} else{
System.out.println("线程"+Thread.currentThread().getId()+":卖完了"+i );
}
System.out.println("线程"+Thread.currentThread().getId()+"运行完"+i+"次"+" 打算睡觉!");
try {
Thread.sleep(1000);
System.out.println("线程"+Thread.currentThread().getId()+"睡醒,等待调用!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
MyRunTest mt=new MyRunTest ();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
结果是:
线程8被调用
线程9被调用
线程9准备减票数
线程9卖出:ticket 5
线程9运行完1次 打算睡觉!
线程8准备减票数
线程8卖出:ticket 4
线程8运行完1次 打算睡觉!
线程10被调用
线程10准备减票数
线程10卖出:ticket 3
线程10运行完1次 打算睡觉!
线程9睡醒,等待调用!
线程10睡醒,等待调用!
线程10被调用
线程10准备减票数
线程8睡醒,等待调用!
线程10卖出:ticket 2
线程9被调用
线程10运行完2次 打算睡觉!
线程8被调用
线程9准备减票数
线程8准备减票数
线程9卖出:ticket 1
线程8卖出:ticket 0
线程9运行完2次 打算睡觉!
线程8运行完2次 打算睡觉!
线程10睡醒,等待调用!
线程10被调用
线程10:卖完了3
线程10运行完3次 打算睡觉!
线程8睡醒,等待调用!
线程8被调用
线程8:卖完了3
线程8运行完3次 打算睡觉!
线程9睡醒,等待调用!
线程9被调用
线程9:卖完了3
线程9运行完3次 打算睡觉!
线程9睡醒,等待调用!
线程10睡醒,等待调用!
线程10被调用
线程10:卖完了4
线程8睡醒,等待调用!
线程10运行完4次 打算睡觉!
线程9被调用
线程8被调用
线程9:卖完了4
线程8:卖完了4
线程9运行完4次 打算睡觉!
线程8运行完4次 打算睡觉!
线程9睡醒,等待调用!
线程9被调用
线程9:卖完了5
线程9运行完5次 打算睡觉!
线程8睡醒,等待调用!
线程8被调用
线程8:卖完了5
线程8运行完5次 打算睡觉!
线程10睡醒,等待调用!
线程10被调用
线程10:卖完了5
线程10运行完5次 打算睡觉!
线程8睡醒,等待调用!
线程8被调用
线程8:卖完了6
线程10睡醒,等待调用!
线程9睡醒,等待调用!
线程10被调用
线程8运行完6次 打算睡觉!
线程10:卖完了6
线程9被调用
线程10运行完6次 打算睡觉!
线程9:卖完了6
线程9运行完6次 打算睡觉!
线程8睡醒,等待调用!
线程8被调用
线程9睡醒,等待调用!
线程9被调用
线程9:卖完了7
线程9运行完7次 打算睡觉!
线程8:卖完了7
线程8运行完7次 打算睡觉!
线程10睡醒,等待调用!
线程10被调用
线程10:卖完了7
线程10运行完7次 打算睡觉!
线程8睡醒,等待调用!
线程10睡醒,等待调用!
线程9睡醒,等待调用!
补充:综合编程 , 其他综合 ,