1. 线程开的越多,则性能越好吗?
    未必,影响多线程性能的因素有:上下文切换,竞争/死锁,资源限制等。对于这些因素要均衡考量,才能获得较好的性能。
  2. 并发控制/线程间的通信方式
    基本的并发控制原语有 volatile, synchronized, ReentrantLock, Atomics, wait/nofify/nofityAll 等
    用于多个线程协调的类: countDownLatch,CyclicBarrier
    信号量: Semaphore, 可控制并发的数量
    两个线程交换数据: Exchanger
    异步等待返回结果:Future,FutureTask (另外也可通过回调实现)
    Volatile: 修饰字段/成员变量,对该变量的访问均需从共享内存中获取,对它的改变必须同步刷新回共享内存,可保证所有线程对变量访问的可见性(CAS)
    Synchronized: 可修饰方法或同步块,确保多个线程在同一时刻只有一个位于同步块中,保证线程对变量访问的可见性和排他性(串行执行),保证线程的本地副本与主存的同步
  3. 多线程两种方式的区别(Thread类和Runnable接口)
    参考http://blog.csdn.net/michellehsiao/article/details/7639788
    a)Runnable 适合多个相同程序代码处理统一资源的情况,可将数据有效分离,较好体现面向对象的编程思想(适用于资源的共享,Thread不可)
    b)Runnable接口 可避免Java单继承机制带来的局限,可继承其他类的同时,实现多线程的功能(扩展该接口)
    c)Runnable 可增加程序健壮性,代码可被多个线程共享
    d)Thread是Runnable接口的子类
    实际应用中以Runnable为主

Java并发编程概要的更多相关文章

  1. 【Java并发编程实战】----- AQS(四):CLH同步队列

    在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形.其主要从两方面进行了改造:节点的结构与节点等待机制.在结构上引入了头 ...

  2. 【Java并发编程实战】----- AQS(三):阻塞、唤醒:LockSupport

    在上篇博客([Java并发编程实战]----- AQS(二):获取锁.释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起:在释放锁后,需要唤醒该线程的继任节点 ...

  3. 【Java并发编程实战】----- AQS(二):获取锁、释放锁

    上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放. AQS锁获取 AQS包含如下几个方法: acquire(int arg):以独占模式获取对象,忽略中断. acquireInte ...

  4. 【Java并发编程实战】-----“J.U.C”:CLH队列锁

    在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列.他能够确保无饥饿,严格的先来先服务的公平性.下图是CLH队列节点的示意图: 在CLH队列的节点QN ...

  5. 【Java并发编程实战】-----“J.U.C”:CountDownlatch

    上篇博文([Java并发编程实战]-----"J.U.C":CyclicBarrier)LZ介绍了CyclicBarrier.CyclicBarrier所描述的是"允许一 ...

  6. 【Java并发编程实战】-----“J.U.C”:CyclicBarrier

    在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...

  7. 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock

    ReentrantLock实现了标准的互斥操作,也就是说在某一时刻只有有一个线程持有锁.ReentrantLock采用这种独占的保守锁直接,在一定程度上减低了吞吐量.在这种情况下任何的"读/ ...

  8. Java并发编程:volatile关键字解析

    Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...

  9. JAVA并发编程J.U.C学习总结

    前言 学习了一段时间J.U.C,打算做个小结,个人感觉总结还是非常重要,要不然总感觉知识点零零散散的. 有错误也欢迎指正,大家共同进步: 另外,转载请注明链接,写篇文章不容易啊,http://www. ...

随机推荐

  1. vi 命令 使用方法

    一.Unix编辑器概述       编辑器是使用计算机的重要工具之中的一个,在各种操作系统中,编辑器都是不可缺少的部件.Unix及其类似的ix 操作系统系列中,为方便各种用户在各个不同的环境中使用,提 ...

  2. SimpleDateFormat使用详解及与毫秒的相互转换

    1. SimpleDateFormat使用详解 public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方 ...

  3. Java Web目录

    1. Spring持久化 2. Spring核心之IoC——依赖注入 3. Hibernate查询语言 4. Hibernate 实体关联关系映射(转载) 5. 用MyEclipse自动生成hiber ...

  4. ubantu 安装mysql

    sudo apt-get install mysql-server mysql-client

  5. mongodb 操作语句与sql操作语句对比

    上行:SQL 操作语句 下行:Mongo 操作语句 CREATE TABLE USERS (a Number, b Number) db.createCollection("mycoll&q ...

  6. [JavaEE] Hibernate OGM

    Hibernate Object/Grid Mapper (OGM)这个项目能够为NoSQL数据库提供Java Persistence(JPA)支持.它复用了Hibernate Core引擎将实体持久 ...

  7. MySQL(23):事务的隔离级别出现问题之 脏读

    1. 脏读 所谓的脏读就是指一个事务读取了另一个事务未提取的数据. 试想一下:a账户要给b账户100元购买商品,如果a账户开启一个事务,执行下面的update语句做了如下转账的工作: update a ...

  8. 【Shell脚本学习18】Shell for循环

    与其他编程语言类似,Shell支持for循环. for循环一般格式为: for 变量 in 列表 do command1 command2 ... commandN done 列表是一组值(数字.字符 ...

  9. ilter()和find()的区别

    这是jQuery里常用的2个方法.他们2者功能是完全不同的,而初学者往往会被误导. 首先 我们看.find()方法:现在有一个页面,里面HTML代码为;程序代码 <div class=" ...

  10. EntityFramework使用中的一些Bug

    1. No Entity Framework provider found for the ADO.NET provider 解决方法:添加  EntityFramework.SqlServer.dl ...