java第24天(线程的创建,线程中的常用方法,线程阻塞,守护线程,线程同步异步,并发问题)

多线程

线程的创建方式

  1. 继承Thread类
  2. 实现Runnable接口
    实现Runnable接口后重写run()方法
    注意:创建线程的时候还是需要new Thread对象
    image
  3. 匿名内部类创建
    创建Thread匿名内部类的方法
    image
    创建Runnable匿名内部类(这个匿名内部类实现的是接口,接口中没有start()方法,所以还需要创建一个Thread对象,然后传入匿名内部类对象)
    image
    注意:线程的启动是调用start()方法,run()方法是定义线程任务的

线程中的常用方法

  1. getName():获取线程名
Thread t1=new Thread();
String name=t1.getName();
System.out.println(t1);//Thread[Thread-0,5,main]
System.out.println(name);//Thread-0
  1. currentThread():获取当前执行的线程对象
t1=Thread.currentThread();
System.out.println(t1);//Thread[main,5,main]
System.out.println(t1.getName());//main

isDaemon():判断线程是否是守护线程
sleep(long time):线程的休眠,休眠指定time时间
yield():线程的阻塞,让线程立即进入到就绪状态(不管时间有没有执行完)
join():线程阻塞
setPriority(int num):设置线程的优先级
注意:直接打印线程会输出Thread[main,5,main]---->Thread[线程名,优先级,在哪个方法],线程的优先级分为1-10,默认是5,理论上讲,优先级越高的线程,抢到时间片的概率越高,1最低,10最高

线程的阻塞:sleep(),yield(),jion(),wait()

  1. sleep(long time):线程的休眠,线程在休眠time个毫秒值后,进入到就绪状态,此时有需要再次抢到时间片才会继续运行
  2. yield():立即让线程进入到就绪状态,不管当前线程的时间片有没有执行完,都强制进入到就绪状态
    例如:sleep(2000),name该线程下次运行的时间一定是大于2000毫秒的
  3. join()
    image

注意:该方法出现在哪个线程中,就阻塞谁,哪个线程调用该方法,就等该方法先执行完

守护线程:又叫后台线程,当没有前台线程的时候,后台线程会自动结束

线程名.setDaemon(true);
image

例如:垃圾回收器就是一个守护线程

并发

并发:多线程并发,通常是多个线程做同一件事情的时候冲突了
异步:一起执行,互相不干涉(效率高)
同步:排队,你先执行完我再执行(效率低)
如果程序造成并发,严重会直接导致系统崩溃
synchronized:锁,用于解决并发,加在方法上,让该线程在执行该方法时,谁先进来,谁就先执行,后来的需要等待
image

posted @   不再犹豫27  阅读(19)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示