多线程笔记——1
在学习多线程的时候首先我们要清楚一线问题:
1进程:系统分配资源和调度的独立单位,线程: 进程中独立运行的子任务
2多线程的实现方式 集成Thread类和实现Runnable接口
3线程的执行顺序与调用顺序无关的,start()方法会通知“线程规划器”,由它启动一个线程来执行run()方法
4Thread类其实也是实现的Runnable接口 其源码中定义为: class Thread implements Runnable
5“互斥区”“临界资源”指的是加锁的代码块
6println(i++)存在的线程安全问题,println是安全的,但是i++的执行是在println之前的
7currentThread()返回的是当前正在被哪个线程调用的信息
8isAlive() 是判断线程是否还活着,即已启动,尚未终止的线程
9sleep()是让当前线程休眠,getId()是获取线程的唯一标示
10 停止线程 Thread.stop() 暴力停止,释放锁后会产生不良后果,不建议使用。
interrupt,并不是停止,只是打了个停止的标记,但是线程还在 运行
判断线程的状态 this.interrupted执行后标志清除为false
this.isInterrupted 不清除标志
使用异常法来终止线程.,即对当前线程的状态进行判断,如果标记为停止就抛出一个异常,终止线程
如果线程在sleep状态下被停止,则会抛出异常
使用return方法来停止线程
11暂停一个线程
suspend()暂停 resume唤醒 缺点独占资源
12 yield方法的作用是让线程放弃当前的cpu资源,但是可能刚放弃立马就获得
13 线程的优先级
分为1~10这10个等级,若果不在这个范围,就会抛出IllegalArgumentException()
jdk有三个常亮来定义优先级
MIN_PRIORITY =1
NORM_PRIORITY=5
MAX_PEIORITY =10
14 守护线程
最典型的就是gc