线程和进程 以及何时使用
链接
同步
同步和通信是一个概念
进程同步(通信)的方式:管道,信号量,消息队列,共享内存,套接字
线程同步(通信)的方式:有四种,牢记,临界区,互斥量,信号量,事件
但是一般都说进程通信与线程同步
临界区和互斥量:用于互斥控制
信号量和事件:用于同步控制
事件对象: 通过通知操作的方式来保持线程的同步,可以实现对多个线程的优先级比较的操作 如:countDownLauch
线程同步的概念:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。
这里的同步不是 同时的意思,而是协同、协助、互相配合,按照有序的顺序进行,一个做完了一个在做。
线程同步的真实意思和字面意思恰好相反。线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。
同步包含互斥,同步和互斥不是相对的定义
同步的例子:
1.进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。
2.一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。
同步通信与异步通信
这里的同步不是上边的同步,是客户端(请求的一方)和服务器端的消息通信机制
同步和异步通常用来形容一次方法调用。
- 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
- 异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。
阻塞和非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
java 多进程的实现
Java提供了两种方法用来启动进程或其它程序:
(1)使用Runtime的exec()方法
(2)使用ProcessBuilder的start()方法