Java基础知识 -- 并发控制

一. 基础知识

1. Java语言支持语言级并发
2. 多线程的作用
  • 提高UI的响应速度
  • 提高硬件资源的利用效率
  • 隔离高速硬件和低速硬件
  • 提供程序上的抽象来隔离不同的运行模块

二. 线程的生命周期

1. 线程的状态
  • 出生态(Born)/新线程(New Thread)
  • 就绪态(Ready)/可运行线程(Runnable Thread)
  • 运行态(Running)
  • 休眠态(Sleeping)
  • 等待态(Waiting)
  • 阻塞态(Blocked)
  • 死亡态(Dead)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rie2Gs7v-1597502871128)(upload\image-20200730231601043.png)]
2. 两个线程的“依赖”关系
  • 某个线程只有在另一个线程终止时,才能继续执行,则依赖线程可以调用另一个线程的join()方法,当另一个线程死亡时,依赖线程从等待态转化为就绪态
3. 线程的优先级
  • 当Java线程被创建时,该线程从父进程中继承优先级并保持一致
  • 线程被创建后,可以改变线程的优先级
  • 线程的优先级定义为10级,分别用数字1到10表示
    • 最高优先级MAX_PRIORITY对应10级
    • 默认优先级NORM_PRIORITY对应5级
    • 最低优先级MIN_PRIORITY对应1级
  • 调用Thread类的getPriority()方法获取线程的优先级,setPriority()方法更改线程的优先级

三. 线程的创建

1. Thread类
  • Thread类是java.lang.Object类的直接子类
成员属性:
	MAX_PRIORITY 10
	MIN_PRIORITY 1
	NORM_PRIORITY 5
	
构造方法:
	public Thread()
	public Thread(Runnable target)
	public Thread(String name)
	public Thread(Runnable target, String name)
	public Thread(ThreadGroup group, Runnable target)
	public Thread(ThreadGroup group, String name)
	public Thread(ThreadGroup group, Runnable target, String name)
	public Thread(ThreadGroup group, Runnable target, String name, long stackSize)

成员方法:
	interrupt() //中断线程
	join() //等待该线程终止
	join(long millis) //等待该线程终止,在指定的毫秒数内
	join(long millis, int nanos) //等待该线程终止,在指定的毫秒数加指定的纳秒数内
	sleep(long millis) //休眠当前正在执行的线程,在指定的毫秒数内
	sleep(long millis, int nanos) //休眠当前正在执行的线程,在指定的毫秒数加指定的纳秒数内
	start() //启动线程
	yield() //暂停当前正在执行的线程,并执行其他线程
	run() //执行线程体
	notify() //唤醒在此对象监视器上等待的单个线程
	notifyAll() //唤醒在此对象监视器上等待的所有线程
	wait() //导致当前的线程等待
	wait(long timeout) //导致当前的线程等待timeout毫秒
	wait(long timeout, int nanos) //导致当前的线程等待timeout毫秒加nanos纳秒
	isAlive() //测试线程是否处于活动状态
	isInterrupted() //测试线程是否已经中断
	getPriority() //返回线程的优先级
	getId() //返回线程的标识符
	getName() //返回线程的名称
	getState() //返回线程的状态
	setPriority(int newPriority) //更改线程的优先级
	setName(String name) //改变线程名称,使之与参数name相同
2. 创建线程
(1)方法一:继承Thread类
  • 具体步骤:
    • 扩展Thread的类
    • 实现run()方法
    • 通过new关键字实例化该类的一个新对象(即一个线程):new ClassName()
    • 通过调用start()方法启动线程
(2)方法二:实现Runnable接口
  • java.lang中的接口Runnable,其中只有一个run()方法
  • 具体步骤:
    • 实现Runnable接口
    • 实现run()方法
    • 通过new关键字实例化该类的一个新对象(即一个Runnable对象),然后将之用作Thread()构造方法的参数,用来生成新的线程体对象:new Thread(new ClassName())
    • 通过调用start()方法启动线程

四. 线程之间的协作

1. 同步(synchronized)
  • 同步方法(语句块)当一个线程执行时自动加锁,直到方法(语句块)运行结束,锁结束
  • 设置同步
    • 方法同步:synchronized ReturnType methodName(parameterList) { method statement; }
    • 语句块同步:synchronized(object) { statement; }
2. 使用wait()和notify()/notifyAll()实现多线程的协作
  • 线程调用wait()后进入等待态
  • 释放监控器的锁,暂停运行
  • 时间到,或notify()唤醒后进入就绪态
  • 申请到监控器的锁,运行wait()后续代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值