java线程基本知识(1)

 

  1. wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。

 

         2.notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程。

 

        3.wait(long timeout)让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的notify()方法或 notifyAll() 方法,或者超过指定的时间量”,当前线程被唤醒(进入“就绪状态”)。

 

  4.join()方法:就是谁调用这个方法,就让调用此方法的线程进入阻塞状态,等待我执行完毕之后,再往下执行。

 

  5.当一个线程调用 yield 方法时,当前线程会让出CPU使用权,然后处于就绪状态,线程调度器会从线程就绪队列里面获取一个线程优先级最高的线程,当然也有可能会调度到刚刚让出CPU的那个线程来获取CPU执行权。

 

  6.对缓存行中的单个变量进行修改了,导致整个缓存行数据也就失效了,并且会导致其他CPU的含有被改动的共享变量的缓存行也失效了,就是所谓的伪共享问题。而缓存行是为了解决缓存一致性的问题所引入的。所以,解决了缓存一致性的问题,又导致了伪共享问题的出现。

 

  7.悲观锁:读取时加锁,更新完释放锁,再此过程中会造成其他线程阻塞,导致吞吐量低,适用于多写场景。乐观锁:不加锁,只有在更新时验证数据是否被其他线程更新,吞吐量较高,适用于多读场景。

posted @ 2021-04-06 17:17  love_____Yuu  阅读(73)  评论(0)    收藏  举报