Java多线程
文章平均质量分 81
Java多线程详解和实例。
zhangphil
zhangphil@live.com
展开
-
Java优先级队列PriorityQueue
import java.util.Comparator;import java.util.Iterator;import java.util.PriorityQueue;/** * PriorityQueue不是线程安全的。 * PriorityQueue对加入队列的数据排序,默认是自然升序。 */public class Main { public static v...原创 2019-08-20 23:03:40 · 353 阅读 · 2 评论 -
Java线程同步阻塞队列LinkedTransferQueue
Java线程同步阻塞队列LinkedTransferQueueimport java.util.concurrent.LinkedTransferQueue;import java.util.concurrent.TimeUnit;/** * Java线程同步阻塞队列LinkedTransferQueue * * Java LinkedTransferQueue是Synchron...原创 2019-08-18 23:26:04 · 693 阅读 · 0 评论 -
Java DelayQueue线程同步的延迟队列
Java DelayQueue线程同步的延迟队列import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.DelayQueue;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;...原创 2019-08-12 23:06:17 · 704 阅读 · 0 评论 -
Java线程同步Condition替代wait-notify
Java线程同步Condition替代wait-notifypackage zhangphil.demo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import java.util.concurrent.TimeUnit;im...原创 2019-08-06 23:06:42 · 1007 阅读 · 0 评论 -
Java CompletableFuture.runAfterEither任何一个完成就执行Runnable
Java CompletableFuture.runAfterEither任何一个完成就执行Runnable假设两个互不相干的任务A和B,只要任何一个完成就触发执行线程Runnable private void test() { CompletableFuture f1 = CompletableFuture.supplyAsync(new Supplie...原创 2019-08-03 23:08:09 · 945 阅读 · 0 评论 -
Java线程同步队列SynchronousQueue
Java线程同步队列SynchronousQueueSynchronousQueue是一个没有数据缓冲的阻塞队列。生产者线程插入数据(put)必须等待消费者的移除数据(take),反之亦然。SynchronousQueue内部没有维护数据队列,故,开发者不能使用peek方法取数据。也不能像往常那样遍历队列。SynchronousQueue特别适用于数据传递和交换的场景。比如对于经典生产者-...原创 2019-07-30 23:03:52 · 1626 阅读 · 0 评论 -
Java线程同步synchronized wait notifyAll
public class Main { public static void main(String[] args) { Main main = new Main(); main.test(); } private void test() { new Thread(new Runnable() { ...原创 2019-07-18 23:46:29 · 455 阅读 · 0 评论 -
Java线程同步与阻塞ReentrantLock - Condition替换wait - notify
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class Main { private ReentrantLock lock = new ReentrantLock(false); private Condition con...原创 2019-07-17 23:17:34 · 630 阅读 · 0 评论 -
Java阻塞式线程同步队列BlockingQueue,SynchronousQueue和TransferQueue
Java阻塞式线程同步队列BlockingQueue,SynchronousQueue和TransferQueueBlockingQueue在队列读或取数据时候加锁。生产者向队列添加元素但队列已满时,生产者会被阻塞,反过来,当消费者从队列取出元素但队列为空时,消费者会被阻塞。BlockingQueue(和Queue)是Java 1.5加入的接口类,它是这样一种队列:当生产者向队列添加元素但队...原创 2019-07-02 23:17:01 · 1096 阅读 · 0 评论 -
Java线程同步可重入锁ReentrantLock与Condition
import java.util.LinkedList;import java.util.Queue;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class Main { private Queue<Integer>...原创 2019-06-29 23:35:46 · 685 阅读 · 0 评论 -
Java线程同步栈Stack最新的LinkedBlockingDeque
Java线程同步栈Stack最新的LinkedBlockingDeque自Java 1.2开始,Java官方建议开发者不要使用Vector,为此受影响的还有Stack,因为Stack直接继承自Vector。尤其是,如果遇到线程同步栈的开发场景,可以考虑Java新式的BlockingDeque。BlockingDeque是一个双向的“队列”,它既可以作为FIFO的队列使用,也可以作为FILO的栈...原创 2019-06-27 23:33:06 · 1196 阅读 · 0 评论 -
CompletableFuture thenApplyAsync链式编程
private void test() { CompletableFuture future = CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get() { try {...原创 2019-05-31 23:21:43 · 7975 阅读 · 0 评论 -
Java新AIO/NIO2:AsynchronousFileChannel以CompletionHandler方式读
Java新AIO/NIO2:AsynchronousFileChannel以CompletionHandler方式读import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStream;import java.io.InputStreamReader;import java...原创 2019-03-04 23:10:59 · 1072 阅读 · 0 评论 -
Java新AIO/NIO2:AsynchronousFileChannel以Future方式读
Java新AIO/NIO2:AsynchronousFileChannel以Future方式读假设现在有一个文件file.txt。里面有10个字符串文本:0123456789。为了完整说明BufferByte和AsynchronousFileChannel的读,故意设置ByteBuffer只有4字节。这样导致AsynchronousFileChannel一次性读取到缓冲器读不完,需要多次读写。...原创 2019-02-25 23:15:37 · 1258 阅读 · 0 评论 -
Android LifecycleObserver & ScheduledThreadPoolExecutor用户可见时每隔3秒周期更新,用户不可见时暂停周期更新
Android LifecycleObserver & ScheduledThreadPoolExecutor用户可见时每隔3秒周期更新,不可见时暂停每隔3秒的周期更新简言之,当用户按home键把当前App切换至“后台”不可见时候(用户看不见当前App页面时候),暂停每隔3秒的周期更新操作。当用户又将App切换至前台,用户看到App页面时候,重启每隔3秒的周期性更新。关键是通过Life...原创 2018-11-13 10:44:32 · 737 阅读 · 0 评论 -
新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后执行一个线程动作(2)
新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后执行一个线程动作(2)在附录3的基础上继续深化CyclicBarrier。假设这场龟兔赛跑的过程中,通过CyclicBarrier使得兔子和乌龟均到达400米赛点后,裁判员这时候也需要重启一个秒表计时功能记录当前时间,那么就可以通过CyclicBarrier的构造函数实现一个CyclicBarrier 的“内部线程”做...原创 2018-10-30 20:38:36 · 1062 阅读 · 0 评论 -
新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后再让全部线程处于一个起跑线(1)
新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后再让全部线程处于一个起跑线(1)Java批量线程运行后,有的运行慢,有的运行快,CyclicBarrier让所有线程到达一定状态后继续接着执行。举一个龟兔赛跑的例子,兔子很快就可以到400米赛点,而乌龟跑的慢,很慢才到。现在要求兔子和乌龟必须都到达400米赛点时候才可以重启赛跑。CyclicBarrier的await(...原创 2018-10-29 10:02:17 · 1403 阅读 · 0 评论 -
新Java并发线程控制:CountDownLatch等待所有线程运行完毕才执行
新Java并发线程控制:CountDownLatch等待所有线程运行完毕才执行创建一批Java线程,然后这批Java线程几乎同时全部跑起来,但是有些开发场景下,开发者需要等到这些Java线程全部执行完毕后,才去执行接下去的业务流程。这个时候就可以CountDownLatch就可以派上用场,CountDownLatch是Java语言从1.5引入的线程控制类,* A synchronizat...原创 2018-10-28 12:32:46 · 1875 阅读 · 1 评论 -
新Java线程Semaphore:并行环境下访问竞争资源控制
新Java线程Semaphore:并行环境下访问竞争资源控制Semaphore是从Java 1.5引入的Java线程新内容。Semaphore实现在线程的竞争资源访问环境下,对资源的访问控制。只有申请(acquire)得到Semaphore的许可证的线程任务可以访问竞争资源。例如: private void test() { // 虽然有很多线程想访问某些资源,但...原创 2018-10-27 10:03:10 · 554 阅读 · 0 评论 -
CompletableFuture的runAsync
CompletableFuture的runAsyncCompletableFuture的runAsync只是简单的异步执行一个线程,但是它将返回一个CompletableFuture,有了这个CompletableFuture,可以重新组装和调配,这是和一个普通Runnable不同之处。CompletableFuture future = CompletableFuture.runAsync(ne...原创 2018-07-13 17:39:00 · 20566 阅读 · 3 评论 -
CompletableFuture的exceptionally
CompletableFuture的exceptionally代码:private void test() { System.out.println("开始..."); CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get()...原创 2018-07-12 10:08:08 · 13065 阅读 · 0 评论 -
CompletableFuture的thenCombineAsync
CompletableFuture的thenCombineAsync代码:private void test() { System.out.println("开始..."); CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String ge...原创 2018-07-10 16:14:42 · 4052 阅读 · 0 评论 -
CompletableFuture的applyToEitherAsync:最快返回输出的线程结果作为下一次任务的输入
CompletableFuture的applyToEitherAsync:最快返回输出的线程结果作为下一次任务的输入applyToEitherAsync和附录1的acceptEitherAsync类似,只是说acceptEitherAsync是对结果的消费,而applyToEitherAsync则是把最快返回的计算输出结果,再利用起来作为下一次线程任务的输入。private void test()...原创 2018-07-02 15:23:48 · 3398 阅读 · 0 评论 -
CompletableFuture的acceptEitherAsync:哪个线程跑的最快用那个
CompletableFuture的acceptEitherAsync:哪个线程跑的最快用那个acceptEitherAsync:假设两个线程A和B,不确定A和B哪个最快执行完毕返回, 但是需要使用最快执行完毕的线程返回的结果。那么就可以使用代码:private void test() { System.out.println("开始..."); CompletableFutur...原创 2018-07-02 14:37:16 · 2044 阅读 · 1 评论 -
CompletableFuture的runAfterBothAsync
CompletableFuture的runAfterBothAsyncrunAfterBothAsync:假设有两个线程A和B,这两个线程都是异步执行的,但是不确定A和B何时执行完毕,但是需要在A和B都执行完毕后运行线程C。package zhangphil.test;import android.os.Bundle;import android.support.annotation.Nul...原创 2018-07-02 14:12:19 · 2041 阅读 · 1 评论 -
ScheduledThreadPoolExecutor周期性执行线程任务scheduleAtFixedRate
ScheduledThreadPoolExecutor周期性执行线程任务scheduleAtFixedRate ScheduledThreadPoolExecutor mScheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1); mScheduledThreadPoolExecutor.sched...原创 2018-06-19 16:03:45 · 2289 阅读 · 0 评论 -
Java CompletableFuture : thenAcceptBothAsync
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get() { return "zhangphil...原创 2018-06-19 14:11:35 · 2019 阅读 · 0 评论 -
Java CompletableFuture的complete(7)
Java CompletableFuture的complete(7)先看代码: CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get...原创 2018-06-19 11:35:06 · 10218 阅读 · 0 评论 -
Java CompletableFuture异步线程联合执行thenCombine(6)
Java CompletableFuture异步线程联合执行thenCombine(6) private void method() throws ExecutionException, InterruptedException { //第一个任务。 CompletableFuture<String> f1 = CompletableFuture....原创 2018-06-14 16:41:44 · 4281 阅读 · 0 评论 -
Java CompletableFuture anyOf:线程队列只要有一个异步线程完成就触发(5)
Java CompletableFuture anyOf:线程队列只要有一个异步线程完成就触发(5)private void method() throws ExecutionException, InterruptedException { CompletableFuture<String> f1 = CompletableFuture.supplyAsync(() ...原创 2018-06-13 08:56:03 · 5620 阅读 · 1 评论 -
Java CompletableFuture:allOf等待所有异步线程任务结束(4)
CompletableFuture:allOf等待所有线程任务结束(4) private void method() throws ExecutionException, InterruptedException { CompletableFuture<String> f1 = CompletableFuture.supplyAsync(() -> { ...原创 2018-06-12 20:22:17 · 69068 阅读 · 15 评论 -
Java CompletableFuture:thenCompose (3)
Java CompletableFuture:thenCompose (3) private void seq() throws ExecutionException, InterruptedException { CompletableFuture<String> f1 = CompletableFuture.supplyAsync(new Supplier&l...原创 2018-06-12 19:20:38 · 1779 阅读 · 0 评论 -
Java CompletableFuture组合拼装异步线程任务(2)
Java CompletableFuture组合拼装异步线程任务 private void seq() throws ExecutionException, InterruptedException { System.out.println("时间1:" + System.currentTimeMillis()); CompletableFuture<Stri...原创 2018-06-12 18:52:22 · 761 阅读 · 0 评论 -
Java CompletableFuture(1)
Java CompletableFuture(1) private Long longTimeWork() { try { //模拟耗时操作,特意阻塞5秒。 TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.print...原创 2018-06-12 16:33:33 · 446 阅读 · 0 评论 -
Android使用Thread的interrupt与sleep,重启或暂停线程任务
Android使用Thread的interrupt与sleep,重启或暂停线程任务本文给出一个例子,简单说明如何在Android诸如Activity中,重启或者暂停一个正在无限运作的线程。需求描述:假设在Android的Activity中,有一个线程,永不停息的运作,若当前Activity处于用户可见状态时候,每隔一秒输出一个自增长的计数器值,但是当Activity处于用户不可见时候,暂停线程输出原创 2017-11-20 17:12:55 · 14341 阅读 · 0 评论 -
Java线程调度ScheduledThreadPoolExecutor简单使用样例
Java线程调度ScheduledThreadPoolExecutor简单使用样例代码例子:package test;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class Test { private static class原创 2017-03-08 16:57:28 · 4081 阅读 · 0 评论 -
Java LinkedBlockingQueue
import java.util.concurrent.LinkedBlockingQueue;public class Test { public static void main(String[] args) { LinkedBlockingQueue mQueue = new LinkedBlockingQueue(); new Thread(new Runnable()原创 2018-01-09 11:11:31 · 659 阅读 · 0 评论 -
Java ConcurrentLinkedQueue队列线程安全操作
Java ConcurrentLinkedQueue队列线程安全操作代码示例:package async;import java.util.ArrayList;import java.util.List;import java.util.Queue;import java.util.concurrent.ConcurrentLinkedQueue;/** * * 线程安全队原创 2017-03-25 13:01:31 · 10361 阅读 · 6 评论 -
Java FutureTask
import java.util.ArrayList;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;public class Book { public Book() { ArrayList> mFutures = new ArrayList>(); for (int i原创 2018-01-09 09:53:13 · 532 阅读 · 0 评论 -
Java线程池之FutureTask【Java线程池系列3】
Java线程池之FutureTask【Java线程池系列3】在附录的文章2中,使用了Java的线程池和Future、Callable。本篇文章在文章2的基础上加以改进,基于FutureTask,换掉Future重新实现。FutureTask既实现了Future,也实现了Runnable,所以更加的普适,用法和Future相类似。和附录的文章2代码写法类似,比如:package原创 2015-11-07 15:59:23 · 2081 阅读 · 0 评论