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代码时,如何能够避免多线程并发出 ...
随机推荐
- Linux crond实例
linux系统的定时任务: 1:linux系统自身定期执行的任务工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等. [root@10-4-5-9 ~]# ll /var/l ...
- 根据sys.database_mirroring查询镜像数据库同步状态
SELECT * FROM sys.database_mirroring WHERE database_id =DB_ID('dbname') 主要查看mirroring_state字段和值和mirr ...
- Java之速记(1) - 小结与疑惑
接触Java也有几个年头了,从对编程没有什么概念的新人(在大学里啃J2SE6.0编程指南),到工作用Play框架写一些简单的模块,再到用Structs2+Hibernate编写主要模块,再到现在独立开 ...
- Sublime Text 包管理工具及扩展大全
Sublime Text 是程序员们公认的编码神奇,拥有漂亮的用户界面和强大的功能,例如代码缩略图,多重选择,快捷命令等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写 ...
- win10 家庭中文版打开本地组策略编辑器
win10 家庭中文版打开本地组策略编辑器 CreateTime--2018年5月14日09:01:25 Author:Marydon 1.问题描述 2.问题解析 win10家庭版没有访问本地组策 ...
- ORACLE判断两个日期间隔几个工作日
CreateTime--2017年9月7日17:14:56 Author:Marydon ORACLE判断两个日期间隔几个工作日 方法:使用存储过程 /** * 判断两个日期间隔几个工作日 */ ...
- [转载]编写高性能js
一.执行效率 1. DOM 1.1 使用DocumentFragment优化多次append 说明:添加多个dom元素时,先将元素append到DocumentFragment中,最后统一将Docum ...
- 定制ADempiere(1)- 会议记录
本文是<ADempiere 3.6 Cookbook>一书的实例笔记,详细内容请查阅该书完整内容. 1. 登录pgAdmin III,创建表c_mom: CREATE TABLE adem ...
- Ubuntu8.04系列-系统优化篇
文章欢迎转载,转载请注明出处:嘉骏苑http://luckiss.blogcn.com 原文出处:http://luckiss.blogcn.com/diary,15151058.shtml ...
- Python3.2官方文档翻译--输出格式化
第八章 标准库二 第二部分涵盖了很多更能满足专业开发者需求的高级模块.这些模块在小脚本中非常少出现. 8.1 输出格式化 Reprlib模块为大型的或深度嵌套的容器缩写显示提供了repr()函数的一个 ...