线程创建方式

创建线程的两种方式

一)继承Thread类,重写run方法

 1 package thread;
 2 
 3 public class cat {
 4     public static void main(String[] args) {
 5         Thr cat1 = new Thr();
 6         // 主线程在开启这个线程之后,并不会阻塞在这里,而是会继续向下执行
 7         cat1.start(); // 思考线程开启为什么是start而不是run方法
 8         for (int i = 0; i < 10 ;  i++) {
 9             System.out.println("mian线程执行");
10             try {
11                 Thread.sleep(1000);
12             } catch (InterruptedException e) {
13                 e.printStackTrace();
14             }
15         }
16     }
17 }
18 // 继承Thread之后,Thr类就可以看作一个线程
19 class Thr extends Thread {
20     int count = 0;
21     @Override
22     public void run() {
23         while (true) {
24             System.out.println("干就完了" + "数量为" + (++count));
25             try {
26                 Thread.sleep(1000);
27             } catch (InterruptedException e) {
28                 e.printStackTrace();
29             }
30             if (count == 80) {
31                 break;
32             }
33         }
34     }
35 }

 程序中线程分析:

疑问解答: 为什么不是run而是start?

此时的线程名为main,为串行化,而不是多线程了

 源码解读:

1)

 

 2)

真正实现多线程的是start0方法,是本地方法,底层是c/c++实现的

 

二)实现Runnable接口,重写run方法

  因为java是单继承的,加入现在A类继承了B类,但是想把A类当成线程来使用,此时就不能继承Thread类了。这个时候,该Runnable接口上场表演了。这里不能再用start( )去开启线程了。这里底层使用了设计模式【代理模式】

代理模式:

静态代理开启线程

原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14806561.html