1 package test.capture;
2
3 import java.io.IOException;
4
5 public class MultiThread {
6
7 /**
8 * JAVA线程很好的例子
9 */
10 public static void main(String[] args) {
11
12 System.out.println("-----------我是主线程---------!");
13 //创建线程thread1
14 ThreadUserExtends thread1=new ThreadUserExtends();
15 //创建thread2时以实现了Runnable接口的ThreadUseRunnable类实例为参数
16 Thread thread2 = new Thread(new ThreadUserRunable(),"SecondThread");
17
18 /**
19 * thread1.setPriority(6);//设置thread1的优先级为6
20 * 优先级将决定CPU空出时,处于就绪状态的线程谁先占领CPU开始运行
21 * 优先级范围1到10,MIN_PRIORITY,MAX_PRIORITY,NORM_PAIORITY
22 * 新线程继承创建她的父线程优先级,父线程通常有普通优先级即5NORM_PRIORITY
23 */
24 thread1.start();//启动线程thread1使之处于就绪状态
25
26 System.out.println("-----------主线程将挂起7秒!-----------");
27 try{
28 Thread.sleep(7000);//主线程挂起7秒
29 }catch (InterruptedException e){
30 return;
31 }
32
33 System.out.println("-----------又回到了主线程!-----------");
34
35 if(thread1.isAlive()){
36 thread1.stop();//如果thread1还存在则杀掉他
37 System.out.println("-----------thread1休眠过长,主线程杀掉了thread1!-----------");
38 }else{
39 System.out.println("-----------主线程没发现thread1,thread1已醒顺序执行结束了!-----------");
40 }
41
42 thread2.start();//启动thread2
43 System.out.println("-----------主线程又将挂起7秒!-----------");
44 try{
45 Thread.sleep(7000);//主线程挂起7秒
46 }catch (InterruptedException e){
47 return;
48 }
49
50 System.out.println("-----------又回到了主线程!-----------");
51 if(thread2.isAlive()){
52 thread2.stop();//如果thread2还存在则杀掉他
53 System.out.println("-----------thread2休眠过长,主线程杀掉了thread2!-----------");
54 }else{
55 System.out.println("-----------主线程没发现thread2,thread2已醒顺序执行结束了!-----------");
56 }
57
58 System.out.println("-----------程序结束按任意键继续!-----------");
59 try{
60 System.in.read();
61 }catch (IOException e){
62 System.out.println(e.toString());
63 }
64 }
65 }
66
67 /**
68 * 通过继承Thread类,并实现它的抽象方法run()
69 * 适当时候创建这一Thread子类的实例来实现多线程机制
70 * 一个线程启动后(也就是进入就绪状态)一旦获得CPU将自动调用它的run()方法
71 */
72 class ThreadUserExtends extends Thread{
73
74 ThreadUserExtends(){
75 //无参的构造函数
76 }
77
78 public void run(){
79 System.out.println("+++++++++++我是Thread子类的线程实例!+++++++++++++");
80 System.out.println("+++++++++++我将挂起10秒!+++++++++++++");
81 System.out.println("+++++++++++回到主线程,请稍等,刚才主线程挂起可能还没醒过来!+++++++++++++");
82 /**
83 * 如果该run()方法顺序执行完了,线程将自动结束,而不会被主线程杀掉
84 * 但如果休眠时间过长,则线程还存活,可能被stop()杀掉
85 */
86 try{
87 sleep(10000);//挂起10秒
88 }catch(InterruptedException e){
89 e.printStackTrace();
90 return;
91 }
92 }
93 }
94
95 /**
96 *通过实现Runnable接口中的run()方法,再以这个实现了run()方法的类
97 *为参数创建Thread的线程实例
98 *以这个实现了Runnable接口中run()方法的类为参数创建Thread类的线程实例
99 */
100 class ThreadUserRunable implements Runnable{
101
102 ThreadUserRunable(){//构造函数
103
104 }
105
106 public void run(){
107 System.out.println("***********我是Thread类的线程实例并以实现了Runnable接口的类为参数!***********");
108 System.out.println("***********我将挂起10秒!***********");
109 System.out.println("***********回到主线程,请稍等,刚才主线程挂起可能还没醒过来!***********");
110 /**
111 * 如果该run()方法顺序执行完了,线程将自动结束,而不会被主线程杀掉
112 * 但如果休眠时间过长,则线程还存活,可能被stop()杀掉
113 */
114 try{
115 Thread.sleep(10000);//挂起10秒
116 }catch(InterruptedException e){
117 e.printStackTrace();
118 return;
119 }
120 }
121 }
122
123
124