一本 Java 多线程笔记

 

 

一本 Java 多线程笔记

 

作者:HuoDAt

日期:2021/03/31

 

一.线程的基本概念

 

 

  

1.1 程序 进程 线程

 

 

 

线程(thread)作为 调度 和 执行的单位 ,每个线程都有独立的运行栈和 程序计数器 线程切换的开销小

虚拟机栈:VM stack

程序计数器: program couter Register

 

对于 方法区(Method Area) 和 堆(Heap) 是单个进程共享的

进程中的线程可以共享资源

正是由于线程之间的共享资源的关系 所以 多个线程操作系统资源的时候 可能出现安全隐患 ----- 锁的出现

多核服务器的情景下 线程之间的配合 对于性能的影响很大

 

 

 

 

 

 

 

 

 

 

 

 

 

在一个Java应用中 至少有三个线程:

  • main 主线程

  • GC() 垃圾回收

  • 异常处理线程

 

 

 

1.2 并发 与 并行

并发:

   多个 人 干着 多件事情·

并行:

   “同时”,多个人干同一件事情 eg(电商平台秒杀)

 

 

 

 

1.3 为什么要使用多线程(why)

 

  • 提升程序的响应程度。对图形化界面很有意义

  • 提高计算机 CPU 的利用率

  • 改善程序结构 讲一个程序划分为多个线程

 

 

 

1.4 什么时候要使用多线程(when)

  • 程序需要同时执行多个任务

  • 程序 有实现需要等待的任务

  • 有需要后台运行的程序

 

 

 

二.线程的创建与使用

 

 

JVM 允许程序运行多个线程 通过 java.lang.Thread 类来实现

  1. 方法一 :继承Thread方法

    重写 父类 run方法

    创建 继承于Thread的子类的 对象

    调用 子类的 start() 方法

 

 

通过观察 start()的 源码 我们 可以发现 其实start是分两个步骤的

  1. 启动线程

  2. 调用该线程的run方法

 

 

2.2 线程中的基础常用方法

  • start() 启动当前线程 并且调用run方法

  • run()

  • currentThread() 静态方法 返回当前执行的的线程

  • getName()获取线程名字

  • setName()设置线程名字

 

  • yieId() 释放当前CPU执行权

  • join() 插入线程 如本来在主线程 我使用 h1.join

    • 线程就会切换至h1要插入的线程完成后 原来线程才会 停止堵塞状态

  • stop () 强行结束当前线程生命周期

  • sleep(long millitime) 让线程"睡眠"指定毫秒

  • isAlive() 判断当前线程是否存活

复制代码
 1 MyThread  thread1 = new MyThread();
 2 
 3 thread1.getName();
 4 //获取当前线程名字
 5 
 6 thread1.setName("ReNameTest");
 7 //为thread1 线程改名
 8 
 9 Thread.currentThread().setName("ReNameTest_Main")
10 //尝试为主线程改名
11     
12 thread1.start();
13 //运行thread1线程
复制代码

 

 

 

 

 

 

posted @   ONE_bit  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示