java多线程/IO
炎炎夏日_123
这个作者很懒,什么都没留下…
展开
-
java 并发阶段任务中的阶段切换
Phaser类提供了onAdvance()方法,它在Phaser阶段改变时会被自动执行。onAdvance()方法需要两个int类型参数:当前的阶段数和注册的参与者数量。返回的是boolean类型,如果返回的是false,表示phaser继续在执行。如果返回true。则表示phaser类已经执行完成被进入最终态。以下是一个范例。 1.创建Myphaser类并继承Phaser类。 覆盖onAdva原创 2016-02-17 19:41:11 · 442 阅读 · 0 评论 -
java间线程通信的几种方式(II)
1.如何让两个线程嫩能够交叉执行 要让线程能够交叉执行,需要用到锁。看如下代码:package Test;/**/** * @author Administrator wangtao * @createdate 2017-10-10 */public class demo3 { public static void main(String[] args ){ O原创 2017-10-11 14:46:57 · 1250 阅读 · 0 评论 -
java 线程间通信的几种方式
1.如何让两个线程依次执行 假设有两个线程,一个线程A,一个线程B,两个线程分别依次打印 1-3 三个数字即可。package Test;/**/** * @author Administrator * @createdate 2017-10-10 */public class demo1 { public static void main(String[] a原创 2017-10-11 14:12:12 · 5730 阅读 · 2 评论 -
手写一个生产者--消费者模型例子
在并发编程中,比较经典的编程例子就是生产者和消费者模型。下面就是一个例子来诠释一下什么是生产者和消费者以及他们的特点和注意点。1、先定义一个数据对象,public class Data { private String id; private String name; public Data(String id,String name){ this.id = id原创 2017-06-26 21:52:56 · 7953 阅读 · 1 评论 -
java 并发编程之volatile关键字
1.volatile的定义与实现原理: java语言允许访问共享变量,为了能够确保共享变量能被准确和一致性更新,线程应该通过排它锁单独获得这个共享变量。java 提供volatile关键字,确保所有线程看到的变量应该是一致的。 volatile能够提供内存可见性的原因在于CPU会加上一个lock指令。CPU看到这个指令会做两件事: (1)将 当前处理器的缓存行写入到内存中。 (2)导致原创 2017-06-06 11:06:09 · 385 阅读 · 0 评论 -
java 并发编程之concurrentHashMap
之所以会出现concurrentHashMap,是因为hashmap在实现上为了效率高,舍弃了线程安全的考虑。不像hashtable加入了synchronized的关键字来保证线程安全。但是如果在多线程环境下使用hashtable 就会导致锁竞争严重,系统的整体性能会大大降低。而concurrenthashmap采用的是锁分段技术,既保证了系统性能的高效,同时也实现了线程安全。下面我们来看下conc原创 2017-06-06 09:58:51 · 436 阅读 · 0 评论 -
java 并发编程之synchronized。
线程本身是属于操作系统的概念,任何语言都之后通过某种方式来调这种资源来执行某种任务。多线程的核心在于线程间的通信以及线程之间的独立性。java 采用临界区的概念来保证线程的安全性。通过synchronized在对象或者方法上加锁来创建临界区。在多个线程访问的某个加了synchronized关键字的方法或者对象时,会尝试去获得锁。如果拿到了锁,就会执行关键字修饰的方法。如果没有拿到锁,则会不断的轮询原创 2017-05-15 21:30:19 · 318 阅读 · 0 评论 -
java线程执行器
java 执行器分离了任务的创建和执行,通过Runnable接口,只需要将对像交给执行器来执行即可。而不需要自己手动去创建Thread对象。执行器通过创建所需的线程,来负责Runnbale的创建,实例化以及运行。同时,执行器通过线程池来管理线程。大大提高了系统的性能。避免由于不断的创建以及销毁线程所带来的系统开销。下面是本人写的一个关于线程执行器的小示例: 首先创建一个Task类:实现被web服务原创 2016-06-19 21:35:49 · 717 阅读 · 0 评论 -
java 如何运行多个任务并处理返回第一个结果
在并发编程中。有时候我们需要同时处理多个任务,但是却只需要返回个结果就行。可以通过ThreadpoolExecutor类来实现该应用场景。 首先,需要建一个UserValidator类提供用户验证机制。UserValidator.javapublic class UserValidator {private String name;//实现构造方法,初始化name。public User原创 2016-07-02 14:42:43 · 1319 阅读 · 0 评论 -
java 中的单例模式
1.java 中的单例模式主要通过构造方法私有化来实现单例,保证外部变量无法访问以及创建实例。 下面是一个java经典的单例模式:public class SingleTon{ //用一个静态变量来记录唯一的实例 public static SingleTon instance; private SingleTon(){} public SingleTon get原创 2016-06-13 09:42:54 · 1112 阅读 · 0 评论 -
java 通过Executors.newFixedThreadPool创建固定大小的线程执行器
当我们通过Executors的newCachedThreadPool方法来创建线程执行器的时候,会遇到线程池的线程数量问题。如果线程池中没有空闲的线程,执行器会自动的创建一个新的线程。如果有大量的任务到达,系统会造成超负荷。这个时候可以通过创建固定大小的线程执行器来解决这个问题。当达到最大线程数时,将会将新到达的任务阻塞,直到有空闲的线程。 首先创建一个Server类。用于创建执行器。packag原创 2016-06-26 15:00:15 · 4420 阅读 · 0 评论 -
java线程间的通信方式
1.三个运动员各自准备,等到三个人都准备好后,再一起跑 如何能够让每个线程都准备好执行,然后一起执行任务? 1.先创建一个公共 CyclicBarrier 对象,设置 同时等待 的线程数,CyclicBarrier cyclicBarrier = new CyclicBarrier(3); 2.这些线程同时开始自己做准备,自身准备完毕后,需要等待别人准备完毕,这时调用 cycl原创 2017-10-11 15:03:10 · 659 阅读 · 0 评论