java 进程间通讯的有几种方法 java 线程间通信有几种方式

java \u8fdb\u7a0b\u95f4\u901a\u8baf\u7684\u6709\u51e0\u79cd\u65b9\u6cd5\uff1f

\u8fdb\u7a0b\u95f4\u901a\u4fe1\u7684\u65b9\u6cd5\u4e3b\u8981\u6709\u4ee5\u4e0b\u51e0\u79cd\uff1a \uff081\uff09\u7ba1\u9053\uff08Pipe\uff09\uff1a\u7ba1\u9053\u53ef\u7528\u4e8e\u5177\u6709\u4eb2\u7f18\u5173\u7cfb\u8fdb\u7a0b\u95f4\u7684\u901a\u4fe1\uff0c\u5141\u8bb8\u4e00\u4e2a\u8fdb\u7a0b\u548c\u53e6\u4e00\u4e2a\u4e0e\u5b83\u6709\u5171\u540c\u7956\u5148\u7684\u8fdb\u7a0b\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1\u3002 \uff082\uff09\u547d\u540d\u7ba1\u9053\uff08named pipe\uff09\uff1a\u547d\u540d\u7ba1\u9053\u514b\u670d\u4e86\u7ba1\u9053\u6ca1\u6709\u540d\u5b57\u7684\u9650\u5236\uff0c\u56e0\u6b64\uff0c\u9664\u5177\u6709\u7ba1\u9053\u6240\u5177\u6709\u7684\u529f\u80fd\u5916\uff0c\u5b83\u8fd8\u5141\u8bb8\u65e0\u4eb2\u7f18\u5173 \u7cfb \u8fdb\u7a0b\u95f4\u7684\u901a\u4fe1\u3002\u547d\u540d\u7ba1\u9053\u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u6709\u5bf9\u5e94\u7684\u6587\u4ef6\u540d\u3002\u547d\u540d\u7ba1\u9053\u901a\u8fc7\u547d\u4ee4mkfifo\u6216\u7cfb\u7edf\u8c03\u7528mkfifo\u6765\u521b\u5efa\u3002 \uff083\uff09\u4fe1\u53f7\uff08Signal\uff09\uff1a\u4fe1\u53f7\u662f\u6bd4\u8f83\u590d\u6742\u7684\u901a\u4fe1\u65b9\u5f0f\uff0c\u7528\u4e8e\u901a\u77e5\u63a5\u53d7\u8fdb\u7a0b\u6709\u67d0\u79cd\u4e8b\u4ef6\u53d1\u751f\uff0c\u9664\u4e86\u7528\u4e8e\u8fdb\u7a0b\u95f4\u901a\u4fe1\u5916\uff0c\u8fdb\u7a0b\u8fd8\u53ef\u4ee5\u53d1\u9001 \u4fe1\u53f7\u7ed9\u8fdb\u7a0b\u672c\u8eab\uff1blinux\u9664\u4e86\u652f\u6301Unix\u65e9\u671f\u4fe1\u53f7\u8bed\u4e49\u51fd\u6570sigal\u5916\uff0c\u8fd8\u652f\u6301\u8bed\u4e49\u7b26\u5408Posix.1\u6807\u51c6\u7684\u4fe1\u53f7\u51fd\u6570sigaction\uff08\u5b9e\u9645\u4e0a\uff0c\u8be5\u51fd\u6570\u662f\u57fa\u4e8eBSD\u7684\uff0cBSD\u4e3a\u4e86\u5b9e\u73b0\u53ef\u9760\u4fe1\u53f7\u673a\u5236\uff0c\u53c8\u80fd\u591f\u7edf\u4e00\u5bf9\u5916\u63a5\u53e3\uff0c\u7528sigaction\u51fd\u6570\u91cd\u65b0\u5b9e\u73b0\u4e86signal\u51fd\u6570\uff09\u3002\uff084\uff09\u6d88\u606f\uff08Message\uff09\u961f\u5217\uff1a\u6d88\u606f\u961f\u5217\u662f\u6d88\u606f\u7684\u94fe\u63a5\u8868\uff0c\u5305\u62ecPosix\u6d88\u606f\u961f\u5217system V\u6d88\u606f\u961f\u5217\u3002\u6709\u8db3\u591f\u6743\u9650\u7684\u8fdb\u7a0b\u53ef\u4ee5\u5411\u961f\u5217\u4e2d\u6dfb\u52a0\u6d88\u606f\uff0c\u88ab\u8d4b\u4e88\u8bfb\u6743\u9650\u7684\u8fdb\u7a0b\u5219\u53ef\u4ee5\u8bfb\u8d70\u961f\u5217\u4e2d\u7684\u6d88\u606f\u3002\u6d88\u606f\u961f\u5217\u514b\u670d\u4e86\u4fe1\u53f7\u627f\u8f7d\u4fe1\u606f\u91cf\u5c11\uff0c\u7ba1\u9053\u53ea\u80fd\u627f\u8f7d\u65e0\u683c\u5f0f\u5b57\u8282\u6d41\u4ee5\u53ca\u7f13\u51b2\u533a\u5927\u5c0f\u53d7\u9650\u7b49\u7f3a \uff085\uff09\u5171\u4eab\u5185\u5b58\uff1a\u4f7f\u5f97\u591a\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8bbf\u95ee\u540c\u4e00\u5757\u5185\u5b58\u7a7a\u95f4\uff0c\u662f\u6700\u5feb\u7684\u53ef\u7528IPC\u5f62\u5f0f\u3002\u662f\u9488\u5bf9\u5176\u4ed6\u901a\u4fe1\u673a\u5236\u8fd0\u884c\u6548\u7387\u8f83\u4f4e\u800c\u8bbe\u8ba1\u7684\u3002\u5f80\u5f80\u4e0e\u5176\u5b83\u901a\u4fe1\u673a\u5236\uff0c\u5982\u4fe1\u53f7\u91cf\u7ed3\u5408\u4f7f\u7528\uff0c\u6765\u8fbe\u5230\u8fdb\u7a0b\u95f4\u7684\u540c\u6b65\u53ca\u4e92\u65a5\u3002 \uff086\uff09\u5185\u5b58\u6620\u5c04\uff08mapped memory\uff09\uff1a\u5185\u5b58\u6620\u5c04\u5141\u8bb8\u4efb\u4f55\u591a\u4e2a\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff0c\u6bcf\u4e00\u4e2a\u4f7f\u7528\u8be5\u673a\u5236\u7684\u8fdb\u7a0b\u901a\u8fc7\u628a\u4e00\u4e2a\u5171\u4eab\u7684\u6587\u4ef6\u6620\u5c04\u5230\u81ea\u5df1\u7684\u8fdb\u7a0b\u5730\u5740\u7a7a\u95f4\u6765\u5b9e\u73b0\u5b83\u3002 \uff087\uff09\u4fe1\u53f7\u91cf\uff08semaphore\uff09\uff1a\u4e3b\u8981\u4f5c\u4e3a\u8fdb\u7a0b\u95f4\u4ee5\u53ca\u540c\u4e00\u8fdb\u7a0b\u4e0d\u540c\u7ebf\u7a0b\u4e4b\u95f4\u7684\u540c\u6b65\u624b\u6bb5\u3002 \uff088\uff09\u5957\u63a5\u53e3\uff08Socket\uff09\uff1a\u66f4\u4e3a\u4e00\u822c\u7684\u8fdb\u7a0b\u95f4\u901a\u4fe1\u673a\u5236\uff0c\u53ef\u7528\u4e8e\u4e0d\u540c\u673a\u5668\u4e4b\u95f4\u7684\u8fdb\u7a0b\u95f4\u901a\u4fe1\u3002\u8d77\u521d\u662f\u7531Unix\u7cfb\u7edf\u7684BSD\u5206\u652f\u5f00\u53d1\u51fa\u6765\u7684\uff0c\u4f46\u73b0\u5728\u4e00\u822c\u53ef\u4ee5\u79fb\u690d\u5230\u5176\u5b83\u7c7bUnix\u7cfb\u7edf\u4e0a\uff1aLinux\u548cSystem V\u7684\u53d8\u79cd\u90fd\u652f\u6301\u5957\u63a5\u5b57\u3002
\u800c\u5728java\u4e2d\u6211\u4eec\u5b9e\u73b0\u591a\u7ebf\u7a0b\u95f4\u901a\u4fe1\u5219\u4e3b\u8981\u91c7\u7528"\u5171\u4eab\u53d8\u91cf"\u548c"\u7ba1\u9053\u6d41"\u8fd9\u4e24\u79cd\u65b9\u6cd5
\u65b9\u6cd5\u4e00 \u901a\u8fc7\u8bbf\u95ee\u5171\u4eab\u53d8\u91cf\u7684\u65b9\u5f0f(\u6ce8:\u9700\u8981\u5904\u7406\u540c\u6b65\u95ee\u9898)\u65b9\u6cd5\u4e8c \u901a\u8fc7\u7ba1\u9053\u6d41
\u5176\u4e2d\u65b9\u6cd5\u4e00\u6709\u4e24\u79cd\u5b9e\u73b0\u65b9\u6cd5,\u5373\u65b9\u6cd5\u4e00a)\u901a\u8fc7\u5185\u90e8\u7c7b\u5b9e\u73b0\u7ebf\u7a0b\u7684\u5171\u4eab\u53d8\u91cf\u4ee3\u7801\u5982\u4e0b:
public class Innersharethread {public static void main(String[] args) {Mythread mythread = new Mythread();mythread.getThread().start();mythread.getThread().start();mythread.getThread().start();mythread.getThread().start();}}class Mythread {int index = 0;private class InnerThread extends Thread {public synchronized void run() {while (true) {System.out.println(Thread.currentThread().getName()+ "is running and index is " + index++);}}}public Thread getThread() {return new InnerThread();}}/*** \u901a\u8fc7\u5185\u90e8\u7c7b\u5b9e\u73b0\u7ebf\u7a0b\u7684\u5171\u4eab\u53d8\u91cf**/public class Innersharethread {public static void main(String[] args) {Mythread mythread = new Mythread();mythread.getThread().start();mythread.getThread().start();mythread.getThread().start();mythread.getThread().start();}}class Mythread {int index = 0;private class InnerThread extends Thread {public synchronized void run() {while (true) {System.out.println(Thread.currentThread().getName()+ "is running and index is " + index++);}}}public Thread getThread() {return new InnerThread();}}b)\u901a\u8fc7\u5b9e\u73b0Runnable\u63a5\u53e3\u5b9e\u73b0\u7ebf\u7a0b\u7684\u5171\u4eab\u53d8\u91cf\u4ee3\u7801\u5982\u4e0b\uff1a
public class Interfacaesharethread {public static void main(String[] args) {Mythread mythread = new Mythread();new Thread(mythread).start();new Thread(mythread).start();new Thread(mythread).start();new Thread(mythread).start();}}/* \u5b9e\u73b0Runnable\u63a5\u53e3 */class Mythread implements Runnable {int index = 0;public synchronized void run() {while (true)System.out.println(Thread.currentThread().getName() + "is running andthe index is " + index++);}}/*** \u901a\u8fc7\u5b9e\u73b0Runnable\u63a5\u53e3\u5b9e\u73b0\u7ebf\u7a0b\u7684\u5171\u4eab\u53d8\u91cf*/public class Interfacaesharethread {public static void main(String[] args) {Mythread mythread = new Mythread();new Thread(mythread).start();new Thread(mythread).start();new Thread(mythread).start();new Thread(mythread).start();}}/* \u5b9e\u73b0Runnable\u63a5\u53e3 */class Mythread implements Runnable {int index = 0;public synchronized void run() {while (true)System.out.println(Thread.currentThread().getName() + "is running andthe index is " + index++);}}\u65b9\u6cd5\u4e8c(\u901a\u8fc7\u7ba1\u9053\u6d41\uff09:\u4ee3\u7801\u5982\u4e0b\uff1a
public class CommunicateWhitPiping {public static void main(String[] args) {/*** \u521b\u5efa\u7ba1\u9053\u8f93\u51fa\u6d41*/PipedOutputStream pos = new PipedOutputStream();/*** \u521b\u5efa\u7ba1\u9053\u8f93\u5165\u6d41*/PipedInputStream pis = new PipedInputStream();try {/*** \u5c06\u7ba1\u9053\u8f93\u5165\u6d41\u4e0e\u8f93\u51fa\u6d41\u8fde\u63a5 \u6b64\u8fc7\u7a0b\u4e5f\u53ef\u901a\u8fc7\u91cd\u8f7d\u7684\u6784\u9020\u51fd\u6570\u6765\u5b9e\u73b0*/pos.connect(pis);} catch (IOException e) {e.printStackTrace();}/*** \u521b\u5efa\u751f\u4ea7\u8005\u7ebf\u7a0b*/Producer p = new Producer(pos);/*** \u521b\u5efa\u6d88\u8d39\u8005\u7ebf\u7a0b*/Consumer c = new Consumer(pis);/*** \u542f\u52a8\u7ebf\u7a0b*/p.start();c.start();}}/*** \u751f\u4ea7\u8005\u7ebf\u7a0b(\u4e0e\u4e00\u4e2a\u7ba1\u9053\u8f93\u5165\u6d41\u76f8\u5173\u8054)**/class Producer extends Thread {private PipedOutputStream pos;public Producer(PipedOutputStream pos) {this.pos = pos;}public void run() {int i = 8;try {pos.write(i);} catch (IOException e) {e.printStackTrace();}}}/*** \u6d88\u8d39\u8005\u7ebf\u7a0b(\u4e0e\u4e00\u4e2a\u7ba1\u9053\u8f93\u5165\u6d41\u76f8\u5173\u8054)**/class Consumer extends Thread {private PipedInputStream pis;public Consumer(PipedInputStream pis) {this.pis = pis;}public void run() {try {System.out.println(pis.read());} catch (IOException e) {e.printStackTrace();}}}

Java\u591a\u7ebf\u7a0b\u95f4\u7684\u901a\u4fe1

Java\u8fd8\u63d0\u4f9b\u4e86\u4e00\u79cd\u7ebf\u7a0b\u95f4\u901a\u4fe1\u7684\u673a\u5236\uff0c\u8fd9\u79cd\u901a\u4fe1\u901a\u4ec0\u4e48\u5b9e\u73b0\uff1f
wait\uff0cnotify\u7b49\u673a\u5236
\u6216\u4f7f\u7528pipeInputStream\u548cpipeOutputStream

1. \u7ebf\u7a0b\u7684\u51e0\u79cd\u72b6\u6001
\u7ebf\u7a0b\u6709\u56db\u79cd\u72b6\u6001\uff0c\u4efb\u4f55\u4e00\u4e2a\u7ebf\u7a0b\u80af\u5b9a\u5904\u4e8e\u8fd9\u56db\u79cd\u72b6\u6001\u4e2d\u7684\u4e00\u79cd\uff1a
1) \u4ea7\u751f\uff08New\uff09\uff1a\u7ebf\u7a0b\u5bf9\u8c61\u5df2\u7ecf\u4ea7\u751f\uff0c\u4f46\u5c1a\u672a\u88ab\u542f\u52a8\uff0c\u6240\u4ee5\u65e0\u6cd5\u6267\u884c\u3002\u5982\u901a\u8fc7new\u4ea7\u751f\u4e86\u4e00\u4e2a\u7ebf\u7a0b\u5bf9\u8c61\u540e\u6ca1\u5bf9\u5b83\u8c03\u7528start()\u51fd\u6570\u4e4b\u524d\u3002
2) \u53ef\u6267\u884c\uff08Runnable\uff09\uff1a\u6bcf\u4e2a\u652f\u6301\u591a\u7ebf\u7a0b\u7684\u7cfb\u7edf\u90fd\u6709\u4e00\u4e2a\u6392\u7a0b\u5668\uff0c\u6392\u7a0b\u5668\u4f1a\u4ece\u7ebf\u7a0b\u6c60\u4e2d\u9009\u62e9\u4e00\u4e2a\u7ebf\u7a0b\u5e76\u542f\u52a8\u5b83\u3002\u5f53\u4e00\u4e2a\u7ebf\u7a0b\u5904\u4e8e\u53ef\u6267\u884c\u72b6\u6001\u65f6\uff0c\u8868\u793a\u5b83\u53ef\u80fd\u6b63\u5904\u4e8e\u7ebf\u7a0b\u6c60\u4e2d\u7b49\u5f85\u6392\u6392\u7a0b\u5668\u542f\u52a8\u5b83\uff1b\u4e5f\u53ef\u80fd\u5b83\u5df2\u6b63\u5728\u6267\u884c\u3002\u5982\u6267\u884c\u4e86\u4e00\u4e2a\u7ebf\u7a0b\u5bf9\u8c61\u7684start()\u65b9\u6cd5\u540e\uff0c\u7ebf\u7a0b\u5c31\u5904\u4e8e\u53ef\u6267\u884c\u72b6\u6001\uff0c\u4f46\u663e\u800c\u6613\u89c1\u7684\u662f\u6b64\u65f6\u7ebf\u7a0b\u4e0d\u4e00\u5b9a\u6b63\u5728\u6267\u884c\u4e2d\u3002
3) \u6b7b\u4ea1\uff08Dead\uff09\uff1a\u5f53\u4e00\u4e2a\u7ebf\u7a0b\u6b63\u5e38\u7ed3\u675f\uff0c\u5b83\u4fbf\u5904\u4e8e\u6b7b\u4ea1\u72b6\u6001\u3002\u5982\u4e00\u4e2a\u7ebf\u7a0b\u7684run()\u51fd\u6570\u6267\u884c\u5b8c\u6bd5\u540e\u7ebf\u7a0b\u5c31\u8fdb\u5165\u6b7b\u4ea1\u72b6\u6001\u3002
4) \u505c\u6ede\uff08Blocked\uff09\uff1a\u5f53\u4e00\u4e2a\u7ebf\u7a0b\u5904\u4e8e\u505c\u6ede\u72b6\u6001\u65f6\uff0c\u7cfb\u7edf\u6392\u7a0b\u5668\u5c31\u4f1a\u5ffd\u7565\u5b83\uff0c\u4e0d\u5bf9\u5b83\u8fdb\u884c\u6392\u7a0b\u3002

 JAVA进程间通信的方法主要有以下几种:
  (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。
  (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
  (3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送 信号给进程本身。
  (4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。
  (5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。
  (6)内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。
  (7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
  (8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

扩展阅读:java即时通讯开发 ... 线程间通信四个方法 ... c++和java哪个好就业 ... 黑马java视频 ... 为什么都不建议java转测试 ... java三大主流框架 ... 即时通讯源码 ... java和c 先学哪个 ... java线程通信方式有几种 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网