现在的位置: 首页 > 综合 > 正文

黑马程序员-线程学习

2014年01月03日 ⁄ 综合 ⁄ 共 916字 ⁄ 字号 评论关闭

----------------------
ASP.Net+Android+IOS开发
.Net培训、期待与您交流! ----------------------

 

创建线程的2种方法

第一是继承thread类。步骤为:

1 定义类继承thread类。

2 重写thread类中的run方法。

3调用线程的start方法,该方法有两个作用:启动线程,和调用run方法。

第二种方式是实现runable接口。步骤为:

1 定义类实现run接口。

2 重写runable类中的run方法。

3 通过thread类建立线程的对象

4将runable接口的子类的对象做为实参传递给thread类的构造函数。

5 调用thread类的start的方法,开启线程并调用runable借口子类的run方法。

    实现方式和继承有什么区别?

继承thread:线程代码放在子类的run方法中。

实现runable:线程代码存放在接口子类run中。

   多线程出现的安全问题:

问题的原因是:

当多条语句操作一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来,导致共享数据错误,

解决办法:

对多条操作共享数据的语句只能让一个线程都执行完了,才能让别的另一线程执行完,别的线程不可以执行。

     java对多线程的安全问题提供了专业的解决办法,就是提供的synchronize(){需要被同步的代码}

   如果同步函数被静态修饰后,使用的是什么锁?

通过验证,发现不在是this,因为静态方法中不可以定义this。静态进内存中也没有对象,但是一定有该类对应的字节码文件的对象,类名.class。

    如何停止线程?

只有一种,run方法结束。

开启多线程运行,运行的代码通常是循环结构,只需要控制循环,就可以让run方法结束,也就是线程结束。特殊情况:当线程处于冻结状态时,线程就不会结束。当没有指定的方式让冻结的线程回复到运行状态时,这时需要对冻结进行解除,强制让线程回复到运行状态,这样就可以操作标记,让线程结束,thread类提供了interrupet()。

   关于join

当A线程执行到B线程的join方法时,A就会等待,等B线程执行完,A才会开始。

 

抱歉!评论已关闭.