1 import org.junit.Test;
2 /**
3 * 传统线程回顾
4 * 多线程不一定会提高运行效率,和CPU设计和架构有关。
5 * 多线程下载是抢了服务器的资源,并不是自身的机器加快。
6 * @author LiTaiQing
7 */
8 public class TraditionThread {
9 /**
10 * 两种传统线程的创建方式
11 */
12 @Test
13 public void test1(){
14 //方式一
15 Thread thread = new Thread(){
16 /**
17 * 从Thread.class源代码中发现,run方法在默认情况下是执行默认target.run();
18 * @Override
19 public void run() {
20 if (target != null) {
21 target.run();
22 }
23 }
24
25 private Runnable target;
26 */
27 @Override
28 public void run() {
29 while(true){
30 System.out.println(Thread.currentThread().getName());
31 //不要使用this,因为在Runnable创建线程的方式中this是无效的
32 //System.out.println(this.getName());
33 }
34 }
35 };
36 thread.start();
37 /**
38 * 方式二
39 * 使用Runnable更好,更加符合面向对象程序设计的思想,程序结构的耦合性更低,将任务和宿主分离
40 */
41 Thread thread2 = new Thread(new Runnable(){
42 @Override
43 public void run() {
44 while(true){
45 System.out.println(Thread.currentThread().getName());
46 //报错
47 //System.out.println(this.getName());
48 }
49 }
50 });
51 thread2.start();
52 //-------------------------------------
53 /**
54 * 考虑回运行哪一块代码?
55 */
56 new Thread(new Runnable(){
57 @Override
58 public void run() {
59 while(true){
60 try {
61 Thread.sleep(500);
62 } catch (InterruptedException e) {
63 e.printStackTrace();
64 }
65 System.out.println("Runable:"+Thread.currentThread().getName());
66 }
67 }
68 }){
69 /**
70 * 会运行此代码块,子类覆盖了父类的方法 ,那么就先运行子类,否则就去找父类
71 */
72 @Override
73 public void run() {
74 while(true){
75 try {
76 Thread.sleep(500);
77 } catch (InterruptedException e) {
78 e.printStackTrace();
79 }
80 System.out.println("Run:"+Thread.currentThread().getName());
81 }
82 }
83 }.start();
84 }
85 }