线程创建方式

 

 

 

创建线程的两种方式

 

一)继承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( )去开启线程了。这里底层使用了设计模式【代理模式】

代理模式:

 

 

静态代理开启线程

 

posted on   Love&Share  阅读(72)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示