Java 多线程

多线程是一种让程序同时处理多个任务的技术,能提升程序效率,利用多核CPU。线程的状态包括新建、可运行、阻塞、等待、限时等待和终止。start()方法启动线程实现并发,而run()方法同步执行。wait()和sleep()的区别在于是否释放对象监视器。同步方法如synchronized和Lock用于避免死锁。线程间通信可通过wait/notify,守护线程在所有非守护线程结束后结束,join()实现线程插入,阻塞队列用于线程间的协作。
摘要由CSDN通过智能技术生成

多线程

定义

多线程定义:可以让程序同时做多件事情

作用

多线程作用:提高程序效率,发挥多核CPU 的优势

应用场景

多线程应用场景:只要想让多个事情同时运行就需要用到多线程

线程

线程:应用软件中互相独立,可以同时运行的功能

并发

并发:在同一时刻,有多个指令在单个CPU上交替执行

并行

并行:在同一时刻,有多个指令在单个CPU上同时执行

start(启动线程)

start:调用start()方法表现出多线程的特性

run(启动线程)

调用 run()方法,代码还是同步执行的,但等待一个线程的 run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其 run()方法里面的代码。

线程声明周期状态

NEW:线程刚创建还没有启动

Runnable:线程以触发start方法,正常运行状态

Blocked:线程阻塞,等待获取到锁,获取到进入Runnable状态继续运行

Waiting:表示线程处于无效等待状态,如果是wait()方法设置等待,那么就通过notifyAll()方法唤醒,唤醒后进入Runnable状态继续运行

Timed_waiting:表示线程进入到有限时间等待,不如sleep(3),等待3秒后线程继续运行,进入Runnable状态继续运行

Terminated:线程执行完后,进入终止状态

wait()和sleep区别

sleep和 wait 方法都可以放弃 CPU 一定的时间,不同的是如果线程持有某个对象的监视器,sleep 方法不会放弃这个对象的监视器,wait 方法会放弃这个对象的监视器(sleep在指定时间结束后自动继续执行线程,而wait需要等待唤醒)

多线程同步方法

Synchronized 关键字和Lock 锁实现,分布式锁等

死锁

死锁就是两个线程相互等待对方释放对象锁。

多线程如何进行通信

wait/notify

守护线程

setDaemon():设置守护线程

当其它线程执行完毕之后,守护线程会陆续结束

礼让线程

yield():设置礼让线程

礼让线程:暂停当前正常执行的线程对象,让其他有相同优先级的线程执行

插入线程

join():设置插入线程

A线程设置为插入线程后,当A线程执行完毕后,B线程在开始执行

阻塞队列

创建ArrayBlockingQueue对象进行实现
当前线程执行完后才进行退出

notify和notity区别

notityAll:唤醒当前锁对象中的线程
notity:单个线程唤醒时会使用到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值