基础复习3-线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MrwanZH/article/details/84633894

线程


一、创建线程方法1:1、继承Thread类

                                   2、重写run()方法

                                   3、调用start()方法

创建线程方法2:    1、实现Runnable类

                             2、实现run()方法

                             3、创建Thread()

                             4、调用start()方法

二、线程状态(五种):线程调用start()启动后变成就绪状态,CPU分配,线程得到执行机会则调用run方法变成运行状态,当CPU把执行机会给其他线程时,当前线程则变成阻塞状态------单线程应用,同一时间CPU将时间片只给一个线程运行

--新建(New),调用start()

->就绪(Runnable)

->运行(Running)

->阻塞(Blocked),

死亡(Dead),run()方法运行完毕

三、常用方法:

Thread.activeCount():当前启动线程数

Thread.currentThread():获取当前正在运行线程

getId():获取线程唯一标识

getName():获取线程名字

setPriority():设置优先级1-10

getPriority():获得优先级

四、终止线程:

stop() 不推荐,可能造成内存泄漏。如果程序中有资源需要回收时,在回收之前调用过stop()方法则会导致程序毫无征兆的停止从而来不及回收相关的资源,导致程序可能会抛出安全异常
interrupt(),可能报异常,如果调用了sleep方法,会报异常,休眠被打断
正常中断方式:先判断isInterrupter是否是中断状态,然后调用interrupt()

通过标记结束(推荐结束方式)
五、守护线程,也称之为后台线程,主要为其他线程提供支持的后台型进程,如jvm中的GC,守护线程随着主线的结束而结束

setDaemon(true):设置当前线程为守护线程

六、Join线程:让Join线程执行完再执行其他线程

join()

七、死锁
同步块中出现死循环也可能会造成死锁,另一线程一直等待当前资源

多个线程在等待被对方线程占有的资源释放时处于一种死锁状态

八、wait()和sleep()的区别:wait方法是Object类中用于让当前线程对象处于等待状态的方法,wait方法不会主动唤醒休眠中的线程,除非其他对象调用notify或notifyAll方法时,此时被休眠的线程才会被唤醒,wait方法在使用时,当前线程必须持有当前对象监视器(结合synchronized使用),否则会抛出illegalMonitorStateException

Sleep是来自Thread类中的,能够将当前线程处于一定时间休眠状态,当时间达到后,线程会自动唤醒,sleep方法不需要线程对象持有当前的对象监视器
 

猜你喜欢

转载自blog.csdn.net/MrwanZH/article/details/84633894