首页 > 学院 > 开发设计 > 正文

多线程操作中的一些注意点

2019-11-06 08:52:26
字体:
来源:转载
供稿:网友
实现runnable和继承Thread有什么区别呢?1.实现runnable方式好处:避免了单继承的局限,既可以继承其他的父类,又可以进行多线程操作。在定义线程时,建议使用实现Runnable的方式。2.继承Thread类:线程代码存放在Thread子类run方法中。 实现Runnable接口:线程代码存在接口的子类方法run中。3.如何判断哪些语句需要同步:哪些语句操作了共享数据,就需要同步。4.对象如同锁,持有锁的线程可以同步执行,没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。5.同步的前提:1)必须要有2个或2个以上的线程。2)必须是多个线程使用同一个锁。6.同步函数用的是哪一个锁呢?函数需要被对象调用。那么函数都有一个所属对象引用。就是this,所以同步函数使用的锁是this。7.如果同步函数被静态修饰的时候,锁不是this,因为静态方法中也不可以定义this。静态进入内存的时候,内存中没有本类对象,但是一定有该类对对应的字节码文件对象。类名.class,静态的同步方法,使用的锁是该方法所在类的字节码文件对象。8.死锁:同步中嵌套同步这种情况会发生。线程甲拥有A锁,去向乙请求B锁,线程乙拥有B锁,去向线程甲请求A锁,两个线程相持不下,就会发生死锁。9.线程间通讯:其实就是多个线程在操作同一个资源,就是操作的动作不同。10.wait,notify,notifyAll都用在同步当中,需要对持有监视器(锁)进行操作,所以要使用在同步中,因为只有同步具有锁的概念,为什么这些操作线程的方法要定义在Object中呢?因为这些方法在操作同步中线程时,都必须要标识它们所操作线程上的锁,只有同一个线程上的被等待线程,可以被同一个锁上的notify所唤醒。不可以对不同锁中的线程进行唤醒,也即,等待和唤醒必须是同一个锁,而锁可以是任意对象,所以可以被任意对象调用的方法定义在OBject中。11.Thread类中的currentThread(),getname()方法都是静态的,所以可以直接不用创建对象就进行调用。12.如何停止线程?只有一种:run方法结束。开启多线程运行,运行代码通常是循环结构。只要控制住循环,就可以使得run方法结束。13.当没有指定的方式让冻结的线程恢复到运行状态,就需要对冻结进行清除。14.join方法的作用:当A线程执行到B线程的.join()方法时,A就会等待。等B线程都执行完,A才能继续执行。join方法用来临时加入线程执行。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表