1.实现多线程方法及区别?

2.sychronized和lock的区别?

3.Syschronized关键字 Sychronized代码块区别?static synchroniezd?

4.volatile关键字

  • 解释:被volatile修饰的变量对所有线程可见,它是放在共享内存中的
  • 具有可见性:确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的
  • 没有原子性:只有一个线程能够执行一段代码,这段代码通过一个monitor object保护。从而防止多个线程在更新共享状态时相互冲突
  • 使用场景:1.希望用轻量级的同步提高性能2.对变量的写操作不依赖于当前值3.该变量没有包含在具有其他变量的不变式中

5.wait,notify,notifyAll

  • wait:导致当前线程等待,这个方法会释放锁,所以需要在同步代码块中调用(否则会发生IllegalMonitorStateException的异常
  • notify:随机选择一个等待中的线程将其唤醒;notify()调用后,并不是马上就释放对象锁的,而是在相应的synchronized(){}语句块执行结束,自动释放锁后,JVM会在wait()对象锁的线程中随机选取一线程,赋予其对象锁,唤醒线程,继续执行。
  • notifyAll:将所有等待的线程唤醒

6.join,sleep,yield,

  • join:等待调用该方法的线程执行完毕后再往下继续执行(该方法也要捕获异常)
  • sleep:使调用该方法的线程暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同访问共享数据(注意该方法要捕获异常)
  • yeild:与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会

7.线程状态图

8.线程池?

9.共享变量,threadlocal?

8.同步和异步区别?

9.同步和阻塞关系?同步一点阻塞?阻塞一点同步?

10.守护线程

  • 只为其他线程提供服务,当只剩下守护线程时虚拟机退出,不应访问固有资源,随时会中断

results matching ""

    No results matching ""