`
chenzehe
  • 浏览: 532744 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
1、ArrayList ArrayList是List接口最常见的实现,其实现是基于数组的方式实现,无容量的限制,ArrayList是非线程安全的。 如下代码为ArrayList的构造函数,当没有确定的容量大小时,默认长度为10: private transient Object[] elementData; public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException( ...
    集合是Java中是最常用的包,最常见的有Collection和Map两个接口的实现,Collection用于存放多个单对象,而Map用于存放Key-Value形式的键值对。     Collection中常见的又分两种常见类型的接口:List和Set,List支持存放重复的对象,而Set则不支持。List接口中常见的实现类有:ArrayList、LinkedList、Vector、和Stack;Set接口常见的实现类有HashSet、TreeSet;Map常见的接口有HashMap、TreeMap和HashTable,HashMap和HashTable的主区别是HashMap是非线 ...
    Executor框架使用Runnable作为基本的任务表示形式,但是Runnable有一定的局限性:不能返回一个值或抛出一个受检查的异常。实际中很多任务都是存在延迟的,如执行数据库查询、从网络上获取资源或执行复杂计算先进,对于这样的任务,Callable是一种更好的抽象:它认为入口(call)将返回一个值并并可能抛出一个异常。 Callable     定义: package java.util.concurrent; public interface Callable<V> { V call() throws Exception; }     返回 ...
线程池实现类ThreadPoolExecutor        ExecutorService接口扩展了Executor接口,添加了一些用于生命周期的管理方法,ThreadPoolExecutor继承了AbstractExecutorService,而AbstractExecutorService又实现了ExecutorService接口。     ThreadPoolExecutor的通用构造函数为: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...
简介     在JDK5后主要提供的多线程处理都在java.util.concurrent包中,多线程的主要抽象不是Thread,而是Executor,Executor为接口,定义在java.util.concurrent包下,只定义了一个方法: public interface Executor { void execute(Runnable command); ...
    Exchanger<V>,java.util.concurrent包下, 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据,V - 可以交换的对象类型。 构造方法 public Exchanger()创建一个新的 Exchanger。 方法摘要 V exchange(V x) 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。 V exchange(V x, long ti ...
     CyclicBarrier在java.util.concurrent包下,是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用 ...
   CountDownLatch类在java.util.concurrent包下,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数到达0时,则 ...
     Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。      Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕 ...
内置锁     Java提供了一种内置的锁机制来支持原子性:同步代码块(synchronized 关键字 ),同步代码块包含两部分:一个作为锁的对象的引用,一个作为由这个锁保护的代码块。 synchronized {     //代码块 }      每个Java对象都可以用做一个实现同步的锁,这些锁被秒为内置锁(Intrinsic Lock)或监视锁(Monitor Lock),线程进入同步代码块之前会自动获得锁,并且在退出同步代码块时怎释放锁,而且无论是通过正常路径退出锁还是通过抛异常退出都一样,获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。     内 ...
锁的劣势     Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程持有守护变量的锁,都采用独占的方式来访问这些变量,如果出现多个线程同时访问锁,那第一些线线程将被挂起,当线程恢复执行时,必须等待其它线程执行完他们的时间片以后才能被调度执行,在挂起和恢复执行过程中存在着很大的开销。锁还存在着其它一些缺点,当一个线程正在等待锁时,它不能做任何事。如果一个线程在持有锁的情况下被延迟执行,那么所有需要这个锁的线程都无法执行下去。如果被阻塞的线程优先级高,而持有锁的线程优先级低,将会导致优先级反转(Pri ...
     这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。实际上是借助硬件的相关指令来实现的,不会阻塞线程(或者说只是在硬件级别上阻塞了)。可以对基本数据、数组中的基本数据、对类中的基本数据进行操作。原子变量类相当于一种泛化的volatile变量,能够支持原子的和有条件的读-改-写操作。     java.util.concurrent.at ...
    JDK从1.5在多线程编程中提供了并发包java.util.concurrent,此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类。主要代码由大牛Doug Lea完成,其实是在jdk1.4时代,由于java语言内置对多线程编程的支持比较基础和有限,所以他写了这个,因为实在太过于优秀,所以被加入到jdk之中。   concurrent包基本有3个package组成 java.util.concurrent:提供大部分关于并发的接口和类,如BlockingQueue,Callable,ConcurrentHashMap,ExecutorService, Semaph ...
一、ThreadLocal概述 JDK API 写道:      该类在java.lang包里,提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。 API表达了下面几种观点: 1、ThreadLocal不是线程,是线程的一个变量,你可以先简单理解为线程类的属性变量。 2、ThreadLo ...
    JVM把线程分为6种状态,分别是新建(New)、运行(Runnable)、无期限等待(Waiting)、一定时间的等待(Timed Waiting)、阻塞(Blocked)、结束退出(Terminated),如下图: 新建(New): 线程创建后还未启动   运行(Runnable): 包括了Ready和Running两种状态,也就是说此状态的线程可能在等待CPU执行权,也可能正在执行   无期限等待(Waiting): 处于此种状态的线程不会被分配CPU执行时间,它们要等待其它线程显示的唤醒,即调用notify()或notifyAll()方法。以下方法会让线程进入无 ...
Global site tag (gtag.js) - Google Analytics