java---同步与并发概念
Java中并发的形式无非是多线程和多进程两种形式。这两种形式都是可以利用多核来发挥计算能力的。
先说并发:
多进程意味着同时运行多个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多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap() ...
- 探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现]
探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现] https://www.ibm.com/developerworks/cn/java/j-lo-syn ...
- 12、Java并发性和多线程-Java同步块
以下内容转自http://ifeve.com/synchronized-blocks/: Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免 ...
- Java 多线程 (并发)总结
一.概念 1. 维基百科解释 进程是什么? http://zh.wikipedia.org/wiki/%E8%BF%9B%E7%A8%8B 线程是什么? http://zh.wikipedia.org ...
- Java多线程与并发模型之锁
这是一篇总结Java多线程开发的长文.文章是从Java创建之初就存在的synchronized关键字引入,对Java多线程和并发模型进行了探讨.希望通过此篇内容的解读能帮助Java开发者更好的理清Ja ...
- Java编程思想 - 并发
前言 Q: 为什么学习并发? A: 到目前为止,你学到的都是有关顺序编程的知识,即程序中的所有事物在任意时刻都只能执行一个步骤. A: 编程问题中相当大的一部分都可以通过使用顺序编程来解决,然而,对于 ...
- java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)
在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...
- 高并发第二弹:并发概念及内存模型(JMM)
高并发第二弹:并发概念及内存模型(JMM) 感谢 : 深入Java内存模型 http://www.importnew.com/10589.html, cpu缓存一致性 https://www.cnbl ...
- Java 多线程高并发编程 笔记(一)
本篇文章主要是总结Java多线程/高并发编程的知识点,由浅入深,仅作自己的学习笔记,部分侵删. 一 . 基础知识点 1. 进程于线程的概念 2.线程创建的两种方式 注:public void run( ...
- 031.[转] 从类状态看Java多线程安全并发
从类状态看Java多线程安全并发 pphh发布于2018年9月16日 对于Java开发人员来说,i++的并发不安全是人所共知,但是它真的有那么不安全么? 在开发Java代码时,如何能够避免多线程并发出 ...
随机推荐
- wait & waitpid 以及子进程传给父进程的信号分析
wait() 和 waitpid() wait() 系统调用挂起调用进程的执行直到有一个孩子终止.调用 wait(&status) 等价于: waitpid(-1, &status, ...
- 【jQuery获取下拉框select、单选框radio、input普通框的值和checkbox选中的个数】
radio单选框:name属性相同 <input type="radio" id="sp_type" name="p_type" va ...
- mysql数据库创建删除带横杠的数据库名
mysql> create database d-d; ERROR 1064 (42000): You have an error in your SQL syntax; check the m ...
- 总结一些js自定义的函数
1.dayin() 作用:将id为dayin的内容,新建页面并打印,可解决打印某页面中的部分内容的问题. 使用方法:将要打印的内容通过 <span id="dayin"> ...
- C# 非顶端窗口截图 - 用于查找指定窗口并截图
原文地址:http://blog.csdn.net/u013096568/article/details/53400389 panel上可以通过DrawToBitmap截图,不管是否在屏幕外是否有遮挡 ...
- C#:TextBox控件操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 了解C#文件操作
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- blender, 创建多边形面片
按a键清除所有选择,进入Edit Mode,选vertex select方式.然后按住control,使用MLB连续画多个顶点,形成一个多边形,如图所示: 然后同时选中两个端点,点Make Edge/ ...
- Memcached真的过时了吗?
Memcached真的过时了吗? 这两年Redis火得可以,Redis也常常被当作Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis真的在 ...
- 简洁经常使用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法
权限系统.Web开发常见标准子系统之中的一个.结合自己的一些思考和实践,从本篇開始权限系统的设计与实现之路. 近期,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇.仅仅是大致介 ...