Java并发与同步
2014-11-12 01:36
162 查看
Java中并发的形式无非是多线程和多进程两种形式。这两种形式都是可以利用多核来发挥计算能力的。
先说并发:
多进程意味着同时运行多个JVM,这个代价通常比多线程高,每个JVM都有自己的堆栈、都要分别加载各自的类。但是多进程的好处是“隔离性”更好,一个JVM中的程序在运行时发生故障不会对其他JVM产生很大的影响。而在多线程的情况下,一些致命错误可能导致整个JVM挂掉,祸及全体。多线程可以方便地共享内存中的内容,这很方便但有时候也会造成混乱,要小心才是。
在说同步:
在Java的线程之间实现同步是很简单的,用synchronized预就可以实现,再不济就用java.util.concurrent.locks下提供的锁。要注意的是加锁的域或者对象是否正确,以及wait()等操作是会释放synchronized锁的。
而进程间的同步就困难一些了,因为进程之间没有了synchronized这样的机制来保证一个程序段或者一个对象被串行执行和访问。一个进程在执行时,没法预支在执行当前指令和执行下一条指令之间的一刹那会发生什么。比如你创建了一个文件:
看似你是检查文件已存在,然后做了一些读写之类的操作,万无一失的样子。但实际上,在执行完exists()方法返回true之后的那一刹那,这个文件可能就被删除或者重命名了。
对于进程之外的很多资源,都存在这样的情况。这就需要通过文件锁之类的机制来保证正确的资源共享。可以通过操作系统API实现,也可以利用jdk提供的一些API,例如:
http://www.concretepage.com/java/example-filelock-java-nio-channels https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html
先说并发:
多进程意味着同时运行多个JVM,这个代价通常比多线程高,每个JVM都有自己的堆栈、都要分别加载各自的类。但是多进程的好处是“隔离性”更好,一个JVM中的程序在运行时发生故障不会对其他JVM产生很大的影响。而在多线程的情况下,一些致命错误可能导致整个JVM挂掉,祸及全体。多线程可以方便地共享内存中的内容,这很方便但有时候也会造成混乱,要小心才是。
在说同步:
在Java的线程之间实现同步是很简单的,用synchronized预就可以实现,再不济就用java.util.concurrent.locks下提供的锁。要注意的是加锁的域或者对象是否正确,以及wait()等操作是会释放synchronized锁的。
而进程间的同步就困难一些了,因为进程之间没有了synchronized这样的机制来保证一个程序段或者一个对象被串行执行和访问。一个进程在执行时,没法预支在执行当前指令和执行下一条指令之间的一刹那会发生什么。比如你创建了一个文件:
File file = new File("123"); if (file.exists()) // do something on the file
看似你是检查文件已存在,然后做了一些读写之类的操作,万无一失的样子。但实际上,在执行完exists()方法返回true之后的那一刹那,这个文件可能就被删除或者重命名了。
对于进程之外的很多资源,都存在这样的情况。这就需要通过文件锁之类的机制来保证正确的资源共享。可以通过操作系统API实现,也可以利用jdk提供的一些API,例如:
http://www.concretepage.com/java/example-filelock-java-nio-channels https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html
相关文章推荐
- Java并发编程-同步(六)
- Java并发总结(二):同步与原子性
- java同步容器与并发容器
- Java中同步与并发
- 探索 Java 同步机制(Monitor Object 并发模式在 Java 同步机制中的实现)
- 【转】Monitor Object 并发模式在 Java 同步机制中的实现
- java并发-同步与原子性
- 线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析
- 线程高级应用-心得6-java5线程并发库中同步工具类(synchronizers),新知识大用途
- Java并发——同步容器与并发容器
- java并发编程之同步容器
- [Java] 线程之并发与同步
- java并发的初步思考 —— 同步实现及比较
- 线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析
- (35)21.3.6 在其它对象上同步---Java编程思想之并发笔记
- Java并发编程之同步互斥问题
- java并发1--线程间同步
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- java同步和互斥 : 共享数据的并发处理
- Java并发——同步工具类