同步与异步并发和并行阻塞和非阻塞

Posted shamgod-lct

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同步与异步并发和并行阻塞和非阻塞相关的知识,希望对你有一定的参考价值。

同步和异步

同步和异步通常用来形容一次方法的调用。同步方法的调用必须等到该方法返回后才能继续接下来的行为。异步方法更像一个消息传递,一旦调用就会立即返回,调用者可以继续接下来的操作,而异步方法通常会在另一个线程中执行,不会妨碍调用者的工作。

 1 public class SyncDemo {
 2 
 3     public static void main(String[] args) {
 4         //同步调用
 5         //模拟看电视和洗衣服两个行为,同步调用就是得先把衣服洗完了才能看电视,必须等待洗衣服方法的执行完成才能接着执行看电视方法
 6         SyncDemo.washClothes();
 7         SyncDemo.watchTV();
 8         //异步调用
 9         //类似于将衣服丢进洗衣机去洗,不用等待衣服洗完我就可以去看电视,两个方法可以同时执行
10         new Thread(() -> SyncDemo.washClothes()).start();
11         SyncDemo.watchTV();
12     }
13 
14     //洗衣服方法
15     public static void washClothes(){
16         System.out.println("正在洗衣服");
17         try {
18             Thread.sleep(3000);//模拟洗衣服过程
19         } catch (InterruptedException e) {
20             e.printStackTrace();
21         }
22         System.out.println("衣服洗完了");
23     }
24 
25     //看电视方法
26     public static void watchTV(){
27         System.out.println("看电视");
28     }
29 }

并发和并行

并发和并行都可以表示多个任务一起执行,但是侧重点不同。并发偏重于多个任务交替执行,而多个任务有可能还是串行的,而并行是真正意义上的“同时执行”。如果系统只有一个CPU,而使用多线程任务,那么这些任务是不可能并行的,一个CPU一次只能执行一条命令,在这种情况下多线程就是并发的,而不是并行的。只有多个CPU的系统才会出现并行。

阻塞和非阻塞

阻塞和非阻塞是形容多线程间的相互影响。比如一个线程占用了临界区的资源,那么其他线程需要这个资源的线程就只能等待,等待会导致线程挂起,这就是阻塞。非阻塞就是与之相反,它强调没有一个线程可以妨碍其他线程执行,所有的线程都会尝试不断向前执行。

以上是关于同步与异步并发和并行阻塞和非阻塞的主要内容,如果未能解决你的问题,请参考以下文章

同步异步,阻塞非阻塞,并发并行

同步与阻塞,异步与非阻塞的区别(转)

并发并行串行同步异步阻塞非阻塞

并行,并发,串行,同步,异步,阻塞,非阻塞,同步阻塞,同步非阻塞,异步阻塞,异步非阻塞

并发编程 进程基础

进程之并行并发同步异步与阻塞非阻塞