java多线程

Java多线程-并发容器

好久不见. 提交于 2019-12-30 09:38:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java多线程-并发容器 在Java1.5之后,通过几个并发容器类来改进同步容器类,同步容器类是通过将容器的状态串行访问,从而实现它们的线程安全的,这样做会消弱了并发性,当多个线程并发的竞争容器锁的时候,吞吐量会下降。那并发容器是为多线程并发而设计的。那么java1.5中添加了哪些并发容器? 1、ConCurrentHashMap 来替代同步的HashMap 实现 2、CopyOnWriteArrayList 是List的同步实现 3、Queue 和 BlockQueue 接口 4、ConCurrentLinkedQueue 一个并发优先级的队列注意: java6中加入ConCurrentSkipListMap 和 ConCurrentSkipListSet 用来作为同步的SortedMap 和SortedSet .. 二、ConCurrentHashMap 我们都知道同步容器类每当执行一个操作的时候都会持有一个锁,如果同步容器中非常大,比如遍历查找是否存某个对象,消耗时间非常长,但是这段时间不允许其他线程访问这个容器,这是一种糟糕是事情。 下载地址 ConCurrentHashMap 和HashMap 一样都是一个hash表,但是ConCurrentHashMap与HashMap完全使用不同的锁策略

Callable,Future,FutrueTask,CompletionService 详解

醉酒当歌 提交于 2019-12-03 12:15:46
package com.dy.pool; import java.util.concurrent.*; /** * 1: Callable<V> 返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。 Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。 但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。 2: Future<V> 表示异步计算的结果 Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。 3: CompletionService<V> 将生产新的异步任务与使用已完成任务的结果分离开来的服务 , * 生产者 submit 执行的任务。使用者 take 已完成的任务,并按照完成这些任务的顺序处理它们的结果。 * * * 4:FutureTask<V> 可取消的异步计算。实现了RunbaleFuture, * * RunbaleFuture 继承了Future和Runbale,所以FutureTask<V>可以当做一个线程去提交或执行。 * * 返回FutureTask的操作也可以用Future来接受 * * 利用开始和取消计算的方法、查询计算是否完成的方法和获取计算结果的方法,此类提供了对 Future 的基本实现。 * *

java 中两种多线程的区别,start方法和run方法的启动区别

拥有回忆 提交于 2019-12-01 05:29:25
直接上代码看的更清晰: package org.thread.demo; public class MyThread extends Thread{ private String name; public MyThread(String name) { super(); this.name = name; } public void run(){ for(int i=0;i<10;i++){ System.out.println("线程开始:"+this.name+",i="+i); } } } package org.thread.demo; public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.run(); mt2.run(); } } 运行发现结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start方法,则会通过JVM找到run方法。下面启动start方法启动线程: package org.thread.demo; public class ThreadDemo01 { public static