【JavaSE】Java中多线程基本知识

本文深入探讨了进程与线程的概念,包括它们之间的区别、多线程的意义以及如何创建和启用线程。同时,文章还详细介绍了线程安全问题及其解决方法,包括同步和死锁的概念,以及如何避免虚假唤醒。此外,文章还阐述了线程间的通信机制,以及在Java中使用Lock接口进行线程控制的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动。(通俗的说,一个打开的程序)
线程:进程的一个实体,CPU调度分配的基本单位
进程与线程的区别:一个程序至少有一个进程,一个进程至少有一个线程
多线程存在意义:允许多线程冰法,提高程序运行效率
注意:某一瞬间,只有一个线程在CPU上执行
线程的创建方式:new Thread().start()
创建一个线程:Thread类
new Thread()创建一个线程对象
定义一个类继承Threadlei ,子类具有了线程功能
创建Thread类的子类对象,也可以创建一个线程

线程的启用
Thread类定义了start方法,用于启动当前线程
在启用一个线程时,虚拟机会自动调用对象的run()方法
其他方法:
sleep 使线程进入睡眠状态,要指定唤醒时间,会抛出异常
setDaemon ture 将当前进程置为一个后台进程
join 合并线程,会抛异常。加进来的执行,被加的停掉
currentThread 获得当前运行的线程
setName 给线程起名

程序只要有一个非后台(守护)的线程在运行,就不会结束

创建线程方式二
实现Runnable接口
子类覆盖接口中的run方法
通过Tread实例创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread类的构造函数
Thread类对象调用start方法开启线程
Thread的异常只能抓,因为父类没有抛出这样的异常。子类不能抛出比父类更多类型的异常

线程安全问题
出现的原因:多个线程访问出现延迟,线程的随机性
解决方式:同步
synchronized(lock){ }
每个对象都可以作为同步的锁,对象都有一个锁旗标(标志位,0或1)
函数可以直接加synchronized编程同步函数
同步函数用的锁:this对象

需要同步的多段代码要用同一把锁(同一个对象)

死锁:两个对象互相要锁的情况

同步的特点:
同步的前提,需要两个及异常的线程
多个线程使用同一个锁
同步的弊端:每个线程都回去判断同步上的锁,耗费资源,降低运行效率

线程间的通信
两个线程可以互相通信,一个线程可以通过wait方法等待,cpu会让给别的线程。等待的线程需要其他线程调用notify()方法唤醒。notify只能用在唤醒在调用方法的对象上等待的线程,只能在锁上等,不同步即不能操作。为了防止虚假唤醒,wait()应放在循环中。

Lock接口——java.util.concurrent.locks
ReentrantLock
condition(为同一个锁提供不同的wait条件)
await——wait,signal——notify
condition最好也放在循环中,因为condition也会出现虚假唤醒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值