2天多线程视频学习小结

时间:2022-09-06 21:13:04

1.创建一个线程的2种方法:

      a:继承Thread类,复写该类的run方法

      b:实现Runnable接口,实现run方法,然后把该类作为Thread构造方法的参数

2.synchronized是放在方法上也可以用于一个同步代码块,放在非static方法上,锁为this,放在static方法上,放在同步代码块的时候可以指定其锁,同时使用锁是非常耗费资源的。对于一个同步代码块,在开始进入代码块的时候实际上有一个moniterEnter,最后出代码块时会有一个moniterExist,操作系统在操作锁的时候是一个比较复杂的操作。由于我们在代码中看不到锁,synchronized另外一中说法也是隐式操作锁的。


3.每一个对象都有notify(),wait(),等方法

4.jdk1.5之后出现了Lock接口,可以用他的实现类RetrantLock,可以显示的lock()和unLock().使用lock比使用synchronized更好体现在lock可以在同一个锁上挂多套监视器方法,对于像生产者和消费者这样的有多方线程的,就可以各用个的监视器方法,那样在notify时,只会唤醒那一方的线程,而且不再需要使用notifyAll,只需要使用Notify即可,又提升了效率

5.之所以多线程会出现死锁,最低有2个锁,一方线程拿到了其中一个锁,另外一个线程拿到了另外一个锁,两个都需要对方的锁继续


6.多线程之所以会出现安全问题具备2个条件:

  1.针对的是同一个对象

  2.至少有2句以上的操作


7.守护线程属于后台线程,当所有前台的线程都运行完毕之后,后台线程就会停止。可能使用的情况:可以把消费者设置为守护线程,因为他依赖于生产者,当生产者不再生产,消费者的存在就没有意义,所以他应该停止


8.wait和sleep方法的区别:

 a:wait方法需要被唤醒,sleep方法可以自动醒过来

 b:wait方法释放了执行权和执行资格,而sleep方法只是释放了执行权


9.多线程的本质是共享内存,多线程的栈是互不干涉的,但是共享堆内存,方法区