java线程个人学习笔记

线程实现开启:
1.继承Thread,重写run方法,实例化后调用start方法,即会开启一个新的线程执行run里面的代码(实际上Thread是通过实现runnable)
2.实现Runnable接口,实现run方法,然后将该类实例化后放入Thread构造方法实例化一个Thraed对象,调用start方法开启一个线程


线程的五大状态:
1.新建状态
2.就绪状态
3.运行状态
4.阻塞状态
5.死亡状态

计算机的调度方式:
1.分时调度模型(平均分配每个线程占用CPU的时间片段)
2.抢占式调度模型(java虚拟机默认方式)(线程池里线程优先级高的先占用CPU,优先级相同时随机选择)


线程优先级:功能实现一定不能依赖于线程的优先级,而只能把线程优先级作为一种提高程序效率的手段
1~10
Thread有三个静态常量表示线程优先级:数值越大,优先级越高
1.MIN_PRIORITY = 1
2.NORM_PRIORITY = 5(默认)
3.MAX_PRIORITY = 10

线程休眠:
调用静态方法Thread.sleep(long millis)使正在执行的线程暂停,将CPU让给别的线程

线程让步:
调用静态方法Thread.yield()使当前线程让步,与sleep区别在于不会阻塞当前进程,它只是将线程转换成就绪状态;
当某个线程调用yield()后,只有与当前线程优先级相同或者更高的线程才有机会获得执行机会

线程插队:
调用Thread对象的join()方法(不是静态方法,需实例化调用),调用的线程将被阻塞,直到被join()方法加入的线程执行完毕后它才会继续执行,就算被加入的线程调用sleep()方法,也不会执行调用的线程;


线程同步:关键字synchronized
当多个线程使用同一个共享资源时,使用同步锁
1.同步代码块:
synchronized(lock){
........
}
lock是一个锁对象,是同步代码块的关键,该对象可以是任意类型,但多线程共享的锁对象必须唯一,不能在run方法创建锁对象
2.同步方法:被修饰的方法在某一时刻只允许一个线程访问
synchronized 返回值类型 方法名(){}
锁对象是当前对象,即this;如果不创建对象,静态同步方法的锁对象则是class

死锁问题
都在等待对方的锁而不释放自己的锁


多线程通讯:三个方法都是void,需由锁对象调用
wait()使当前线程放弃同步锁并进入等待,直到其他线程进入此同步锁,并调用notify()或者notifyAll()方法唤醒该进程
notify()唤醒此同步锁上等待的第一个调用wait()方法的线程
notifyAll()唤醒此同步锁上调用wait()方法的所有线程
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值