线程的概念

文章详细介绍了线程和进程的概念,包括线程的创建方式、并发与并行的区别、线程的启动与终止,以及线程同步的重要性。提到了synchronized关键字在防止数据竞争中的作用,并指出死锁问题及其避免策略。同时阐述了线程的生命周期状态和不同类型的线程,如用户线程和守护线程。
摘要由CSDN通过智能技术生成

线程
 进程(动态过程):运行中的程序,操作系统会为进程分配内存空间
 线程:线程由进程创建,是进程的一个实体;一个进程可以拥有多个线程

单线程:同一个时刻,只允许执行一个线程
多线程:同一个时刻,可以执行多个线程

并发:同一时刻,多个任务交替执行(单核CPU执行的多任务)
并行:同一时刻,多个任务同时执行(多核CPU实现并行)

创建线程的两种方式
 1.继承Thread类,重写run方法
 2.实现Runnable接口,重写run方法

启动线程用start()方法,start()方法调用start0()方法,底层调用run方法才实现了多线程;而run方法只是一个普通方法;第二种方式:必须创建Thread对象,然后把继承了Runnable接口的对象放入Thread对象,在通过Thread对象启动线程;thread.start()

线程终止
 1.当线程完成任务后,会自动退出
 2.通过使用变量来控制run方法退出的方式终止线程(通知方式)

interrupt,中断线程,但没有真正的结束线程,所以一般用于中断正在休眠的线程

线程插队
 1.yield:线程的礼让,让出CPU,让其他线程执行,但礼让的时间不确定,所以也不一定礼        让成功
 2.join:线程的插队,插队的线程一旦插队成功,则肯定先执行完插入的线程的所有任务

用户线程(工作线程):当线程的任务执行完或通知方式结束
守护线程:一般是为各种线程服务的,当所有的用户线程结束,守护线程自动结束
常见的守护线程:垃圾回收机制

线程的生命周期
 NEW:未启动的线程处于此状态
 RUNNABLE:在java虚拟机执行的线程处于此状态
 BLOCKED:被阻塞等待监听器锁定的线程处于此状态
 WAITING:正在等待另一个线程执行特定动作的线程处于此状态
 TIMED_WAITING:正在等待另一个线程执行特定动作到达指定时间的线程处于此状态
 TERMINATED:已经退出的线程处于此状态

线程同步机制
  在多线程编程,一些敏感的数据不允许多个线程同时访问,此时使用同步机制,保证数据在任何同一个时刻,最多有一个线程访问,以保证数据的完整性

Synchronized(互斥锁)
 1.同步代码块
   synchronized (对象){ //得到对象的锁才能操作同步代码块
    //需要被同步的代码块
     }
 2.同步方法
   public synchronized void m(String name){
    //需要被同步的代码块
  }
同步方法(非静态)的锁可以是this,也可以是其他对象(要求是同一个对象)
同步方法(静态)的锁为当前类本身

死锁:多线程相互占用对方资源,导致死锁

释放锁
 1.当前线程的同步代码块、同步方法正常结束
 2.当前线程在同步代码块、同步方法中遇到break、return
 3.当前线程在同步代码块、同步方法中出现了未处理的error或Exception,导致异常结束
 4.当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并且释放锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值