java多线程相关知识

  1. 带参数的join方法,表示至多等待线程A的时间,而无参数的join方法,则会一直等待线程A执行结束
  2. 等待时wait会释放锁,而sleep一直持有锁
  3. BlockingQueue 伪异步机制就是根据这个实现的
  4. volatile

它所修饰的变量不保留拷贝,直接访问主内存中的。
在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变 量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况。 一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。

  1. volatile只是在线程内存和“主”内存间同步某个变量的值;而synchronized通过锁定和解锁某个监视器同步所有变量的值。显然synchronized要比volatile消耗更多资源
  2. Java不支持类的多重继承,但允许你调用多个接口。所以如果你要继承其他类,当然是调用Runnable接口好
  3. 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的
  4. 竞态条件会导致程序在并发情况下出现一些bugs。多线程对一些资源的竞争的时候就会产生竞态条件,如果首先要执行的程序竞争失败排到后面执行了,那么整个程序就会出现一些不确定的bugs
  5. 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象

    1. 这里写图片描述

猜你喜欢

转载自blog.csdn.net/u011747152/article/details/79373073