JAVA初学笔记&宋红康JAVA高级篇(其十二)

本文详细介绍了JAVA中的多线程概念,包括线程的创建、线程优先级、线程生命周期、线程同步以及死锁问题。通过实例解析了继承Thread类和实现Runnable接口的两种线程创建方式,并探讨了线程同步中的Synchronized关键字应用和单例设计模式的线程安全实现。
摘要由CSDN通过智能技术生成

多线程与多进程

多线程的创建

常用方法
  • void start():启动线程,执行run()
  • run():线程启动后执行
  • String getName():返回线程名称
  • void setName(String name):设置该线程名称
  • static Thread currentThread():返回当前线程。在Thread子类中就是this,通常用于主线程和Runnable实现类
  • static void yield():线程让步。其实就是线程异步
  • join():线程并发堵塞
  • static void sleep(long millis):指定单位为ms,让线程在指定时间内交出CPU控制权,时间到后才获得CPU控制权。 类似于python中的await
  • stop():不保留任何未处理数据的强制关停线程
  • boolean isAlive():bool判断线程是否存活
方式一:继承于Thread类
  1. 创建一个继承于Thread类的子类
  2. 重写Thread类的run()
  3. 创建Thread类的子类的对象
  4. 通过此对象调用start()
class MyThread extends Thread{
   
	// 重修Thread的run
    @Override
	public void run(){
   
		// 多线程执行体
        System.out.println("多线程run成功");
	}
}

class TreadTest{
   
    public static void main(String[] args){
   
        // 创建Thread类的子类的对象
        MyThread t1 = new MyThread();
        
        // 调用start,多线程开启
        t1.start();
        
    }
}
方式二:实现Runnable接口
  1. 定义子类,实现Runnable接口。
  2. 子类中重写Runnable接口中的run方法。
  3. 通过Thread类含参构造器创建线程对象。
  4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。
  5. 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。
区别
继承Thread 实现Runnable
线程代码存放Thread子类run方法中 线程代码存在接口的子类的run方法
实现方式的好处
  • 避免了单继承的局限性
  • 多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源。

线程优先级

调度策略
  • 时间片:“拉链图式”
  • 抢占式:优先级高的线程,优先获得cpu的控制权
Java的调度方法
  • 同优先级默认组成队列,使用时间片策略
  • 对高优先级,优先使用抢占式
优先级等级
MAX_PRIORITY<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值