首页 > 安全资讯 >

学习要点笔记---多线程_1

16-09-18

学习要点笔记---多线程_1

学习要点笔记---多线程_1

实现线程的方法:

1、 继承Thread类,实现runnable接口:

a)Thread实现runnable接口,之间具有多态关系

b)使用Thread创建线程,最大不足就是单继承局限,使用Runnable接口实现了多继承

c)无论哪种方式创建线程,两者的实质是一样的

d)代码的运行结果与代码执行顺序或者调用顺序无关,关乎CPU的时间片分配,谁抢到谁先调用运行

e)线程具有随机性

2、 实例变量共享安全问题:

a)举例密码输入注册问题

3、Start和 run方法的不同:

a)体现在线程当前对象上,run()调用时,构造方法和run方法都是main线程调用,start()调用时,main线程会调用构造方法,但是其中的run()方法是由当前线程所有

b)

c)在执行的时候,代码中的this和Thread.currentThreat()指向的不是同一个线程实例。也就是说,this指向的还是new hello()创建的那个线程实例,而不是new Thread(thread)创建的那个实例即t。查看源代码可以知道。实际上new Thread(thread)会将thread应用的对象绑定到一个pravite变量target上,在t被执行的时候即t.run()被调用的时候,它会调用target.run()方法,也就是说它是直接调用thread对象的run方法,再靠近点说,在run方法被执行的时候,this.getName()实际上返回的是target.getName(),也就是c这个实例对象,而Thread.currentThread().getName()实际上是t.getName()。

 

4、 IsAlive()方法判断线程是否处于活动状态

a)

5、Sleep()方法

a)

 

6、 GetId()方法,作用时取得线程的唯一标识

a)

7、停止线程

 

a)停止线程意味着在该线程完成任务之前停止,放弃当前的操作

b)停止一个线程可以使用stop()方法,但是最好不用,该方法时不安全,并且早已过时

c)大多数操作使用 thread.interrupt()方法,停止、中止,这个方法不会终止一个正在运行的线程,还需要加入判断方法才行

d)三种方可以终止正在运行的线程

i.使用退出标识,是线程正常退出,也就是当run方法完成后线程终止

ii.使用stop方法强行终止线程,不推荐,stop、suspend、resume一样都是过期作废的方法,并且容易产生不可预料的结果

iii.使用interrupt方法中断线程

1.Interrupt不能使线程立即停止

a)判断线程是否停止

i.This.interrupted() : 测试当前线程是否已经中断

ii.

 

iii.第一个为true显然是线程已中断。第二个false,解释为:

a)Interrupted测试当前线程是否已经中断,线程的中断状态由该方法清除,如果连续两次调用该方法,则第二次调用将返回false(在第一次调用已清除了其中断状态后,而且第二次调用检验完中断状态前,当前线程再次中断的情况除外)

ii.This.isInterrupted(): 测试线程是否已经中断:

iii.总结:

1.This.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标识清楚为fasle的功能

2.This.isinterrupted():测试线程thread对象是否已经是中断状态,但是不清除状态标识

 

b)特殊停止线程方法:异常法:

 

c)在sleep中停止线程:

 

i.在sleep状态下停止某一线程,会进入catch语句,并且清除状态值,使之变成false

d)Stop()暴力停止:

 

i.目前stop()已经停止使用,原因:

1.如果强制停止线程有可能会使一些清理性的工作得不到完成

2.对于锁定的对象进行了“解锁”,导致数据得不到同步的处理,出现数据不一致的问题

 

e)释放锁的不良后果:

 

i.使用stop()释放锁可能导致数据不一致的问题,可能会导致程序处理的数据可能造成破坏导致程序执行的流程错误

 

f)使用return停止线程:

 

i.将方法interrupt()和return()结合使用也能实现停止线程的效果

 

相关文章
最新文章
热点推荐