Java并发学习笔记一

1、并发可以提高程序运行速度,能够更好的管理程序设计。

2、在多处理器主机上,可以在这些处理器上运行多个任务,提高吞吐量;然而在单个处理器的主机上,使用并发的话,貌似要比同步的执行的程序资源开销大,因为其中增加了所谓上下文切换的代价,要从一个任务切换到另一个任务,到这里,我们可能认为在但处理器的主机上,使用并发并不能提高程序的性能,反而会消耗更多资源,然而有个问题使得并发在单个处理器上变的不同,这个问题就是阻塞。我们来看看阻塞的含义,如果程序中的某个任务因为控制范围之外的某个条件(一般是IO问题)而导致不能继续的执行下去,那么我们说这个任务是阻塞的。这个时候如果没有并发,整个程序都会停止下来,直到外部的条件满足了,相反如果使用并发的话,那么当这个任务阻塞是,程序中的其他任务还可以继续执行,这样整个程序就可以继续向前执行了。综上来看,从性能角度来上,如果没有任务阻塞的话,并发在单个处理器上是没有任务意义的。

3、并发在单处理器上常见运用是事件驱动的编程

4、并发在JAVA上的体现,是由线程来实现的。我们知道并发程序就是将程序划分为多个分离的、独立运行的任务。通过使用多线程机制,这些独立任务中的一个都将有线程来驱动。一个线程就是一个进程中一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务,但是你的程序使得每个任务都好像有自己的CPU一样,其实底层机制是切分CPU时间。JAVA的线程机制,使得我们可以在并发并发编程上可以从系统处理器这个层次脱离出来,不用去关心程序是运行在单个处理器上,还是多个处理器上的。java的线程机制使我们的并发编程建立在透明的、可扩展的方法上。

时间: 2024-08-24 16:34:07

Java并发学习笔记一的相关文章

Java并发学习笔记(九)-原子类AtomicInteger

AtomicInteger能够保证对一个整型的操作是原子性.像i++这个操作不是原子操作,存在竞态条件,所以需要加锁,但是加锁的性能不高,如果仅仅为了对一个整数加1.我们来看下他的实现. private volatile int value; AtomicInteger本身持有一个整型变量,所有的操作都是基于这个变量的.变量由violate修饰,这个变量是保证可见性的,具体可见另一篇博客 Java并发学习笔记(六)-互斥性和内存可见性. 来看一下对value加1的操作 public final

Java并发学习笔记(八)-LinkedBlockingQueue

LinkedBlockingQueue是由链表组成的阻塞队列,先来看demo public class LinkedBlockingQueueDemo { public static void main(String[] args) { ExecutorService es = Executors.newCachedThreadPool(); BlockingQueue<Bread> queue = new LinkedBlockingQueue<Bread>(10); for(i

Java并发学习之五——线程的睡眠和恢复

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.Thread类的sleep方法,可以使线程睡眠.此方法接收一个整数作为参数,表示线程暂停运行的毫秒数.在调用sleep方法后,当时间结束时,JVM会安排他们CPU时间,线程会继续按指令执行. 另一种可能是使用一个有TimeUnit列举元素的sleep方法,使用线程类的sleep方法让当前线程睡眠,但是它接收的参数单位后会转成毫秒的. 2.当你调用sleep()方法,Thread离开CPU并在一段时间内停止运行.在这段时间内,他是不消耗CP

[原创]java WEB学习笔记95:Hibernate 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

【Todo】Java并发学习 &amp; 示例练习及代码

接上一篇:http://www.cnblogs.com/charlesblc/p/6097111.html <Java并发学习 & Executor学习 & 异常逃逸 & 同步互斥Best Practice & wait/notify, conditon#await/signal> 原文参考:http://www.ciaoshen.com/2016/10/28/tij4-21/ <Thinking in Java 读书笔记:第二十一章 - 并发> 第

Java线程学习笔记(一)

一.线程的创建方式: 老掉牙的话题了,继承 java.lang.Thread父类或者实现Runnalbe接口,这里就提一句: class Thread implements Runnable Thread也是继承了Runnable接口的,Runnable才是大哥. 重写run(),run()里放的都是具体的业务,包括对线程的具体操作. class Thread1 implements Runnable { int i; Thread1(int i) { this.i = i; } @Overri

Berkely DB Java Edition学习笔记

Berkely DB对于高并发.要求速度快的应用来说是个不错的选择,mysql就是用BDB实现的(mysql的后台) ,mysql快,BDB比mysql还要快N倍.BDB是一种嵌入式的.非关系数据库,它与其他的关系数据库RMDBS不同,它没有提供SQL,而是提供 了自己的访问接口.作为一种嵌入式的数据库,它是进程内模式的,也就是说它和应用程序在同一内存空间运行,所以速度要高很多,与嵌入式的数据库如 Derby.HSQLDB(都是RMDBS的)相比,它效率更高,使用方法也有很大的不同.现在BDB以

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(