版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37933685/article/details/80850429
个人博客:https://suveng.github.io/blog/
临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程 使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。
阻塞和非阻塞通常用来形容多线程间的相互影响。
比如一个线程占用了临界区资源,那么其它所有需要 这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。
非阻塞允许多个线程同时进入临界区
饥饿是指某一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行.
Amdahl定律(阿姆达尔定律) – 定义了串行系统并行化后的加速比的计算公式和理论上限 – 加速比定义:加速比=优化前系统耗时/优化后系统耗时
加速比= 优化前系统耗时/ 优化后系统耗时=500/400=1.25
增加CPU处理器的数量并不一定能起到有效的作用,提高系统内可并行化的模块比重,合理增加并行处理器数量才能以最小的投入,得到最大的加速比
说明处理器个数,串行比例和加速比之间的关系
只要有足够的并行化,那么加速比和CPU个数成正比
public void Thread.interrupt() // 中断线程
public boolean Thread.isInterrupted() // 判断是否被中断
public static boolean Thread.interrupted() // 判断是否被中断,并清除当前中断状态
– suspend()不会释放锁 – 如果加锁发生在resume()之前 ,则死锁发生
public final void join() throws InterruptedException
public final synchronized void join(long millis) throws InterruptedException
static void yield() 对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。
线程执行完毕后,系统会调用notifyAll();
不要在Thread实例上使用 wait()和notify()方法
public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
Thread high=new HightPriority();
LowPriority low=new LowPriority();
high.setPriority(Thread.MAX_PRIORITY);
low.setPriority(Thread.MIN_PRIORITY);
low.start();
high.start();
– 指定加锁对象:对给定对象加锁,进入同步代码前要获得给定对象的锁。 – 直接作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁。 – 直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获得当前类的锁。