1. 程式人生 > >Java多執行緒21:多執行緒下的其他元件之CyclicBarrier、Callable、Future和FutureTask

Java多執行緒21:多執行緒下的其他元件之CyclicBarrier、Callable、Future和FutureTask

public static class CyclicBarrierThread extends Thread
{
    private CyclicBarrier cb;
    private int sleepSecond;
        
    public CyclicBarrierThread(CyclicBarrier cb, int sleepSecond)
    {
        this.cb = cb;
        this.sleepSecond = sleepSecond;
    }
        
    public void
run() { try { System.out.println(this.getName() + "運行了"); Thread.sleep(sleepSecond * 1000); System.out.println(this.getName() + "準備等待了, 時間為" + System.currentTimeMillis()); cb.await(); System.out.println(this.getName() + "結束等待了, 時間為" + System.currentTimeMillis()); }
catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { Runnable runnable = new Runnable() { public void run() { System.out.println("CyclicBarrier的所有執行緒await()結束了,我運行了, 時間為" + System.currentTimeMillis()); } }; CyclicBarrier cb
= new CyclicBarrier(3, runnable); CyclicBarrierThread cbt0 = new CyclicBarrierThread(cb, 3); CyclicBarrierThread cbt1 = new CyclicBarrierThread(cb, 6); CyclicBarrierThread cbt2 = new CyclicBarrierThread(cb, 9); cbt0.start(); cbt1.start(); cbt2.start(); }

相關推薦

Java執行21執行其他元件CyclicBarrierCallableFutureFutureTask

public static class CyclicBarrierThread extends Thread { private CyclicBarrier cb; private int sleepSecond; public CyclicBarrie

Java執行20執行其他元件CyclicBarrierCallableFutureFutureTask

CyclicBarrier         接著講多執行緒下的其他元件,第一個要講的就是CyclicBarrier。CyclicBarrier從字面理解是指迴圈屏障,它可以協同多個執行緒,讓多個執行緒在這個屏障前等待,直到所有執行緒都達到了這個屏障時,再一

Java執行11執行同步操作

什麼情況下需要同步 1、當多執行緒併發,有多段程式碼同時執行時,有時希望某一段程式碼執行的過程中CPU不要切換到其他執行緒工作。這時就需要執行緒同步。 2、如果兩段程式碼是同步的,那麼同一段時間只能執行

Java執行12執行的死鎖

Java執行緒死鎖是一個經典的多執行緒問題,因為不同的執行緒都在等待根本不可能被釋放的鎖,從而導致所有的任務都無法繼續完成。在多執行緒技術中,“死鎖”是必須避免的,因為這會造成執行緒的“假死”。 pac

Java執行24使執行具有有序性

正常的情況下,執行緒的執行時多個執行緒之間執行任務的時機是無序的。可以通過改造程式碼的方式使他們執行具有有序性。 程式碼如下: package unit7; public class Demo10_R

java基礎(三)執行

1.程序、執行緒 程序:正在執行的程式 執行緒:程序中負責程式執行的執行單元 即:程序的範圍>執行緒的範圍。 且:一個程序可以有多個執行緒。 2.多執行緒的意義:多部分程式碼同時執行,提高CPU使用效率 3.多執行緒的特點:CPU的隨機性 4.建立執行緒的兩種方法

Java執行19執行其他元件CountDownLatchSemaphoreExchanger

前言       在多執行緒環境下,JDK給開發者提供了許多的元件供使用者使用(主要在java.util.concurrent下),使得使用者不需要再去關心在具體場景下要如何寫出同時兼顧執行緒安全性與高效率的程式碼。之前講過的執行緒池、BlockingQueue都是

java基礎的核心技術執行(一)

1、程式、程序、執行緒的概念 2、java中多執行緒的建立和使用(重點) 2.1、繼承Thread類與實現Runnable介面 2.2、Thread類的主要方法 2.3、執行緒的排程與設定優先順序 3、執行緒的生命週期 4、執行緒的同步(重點) 5、執行緒的通訊  ---

Java執行(ExecutorService ExecutorsCallableFutureFutureTask

前言:我們一般通過繼承Thread類重寫run方法或者實現runnable介面重寫run方法,最後建立和啟動一個執行緒,但是都需要自己建立、啟動Thread物件。執行緒池可以實現幫助我們管理Thread物件,至於要使用幾個執行緒,什麼時候啟動這些執行緒,是開啟多個執行緒還是用單個執行緒來完成

執行(一)建立執行的幾種方法

概括來說就是兩種:1、繼承Thread類,重寫run方法,然後start。不推薦這種,因為java的單繼承特性。 2、Thread類的建構函式中可以接受Runnable任務,所以只要是Runnable例項就可以作為引數給Thread 一般有兩種建立Runnable例項的方法(1)實現Runn

執行基礎工處理(18)——MESI協議以及帶來的問題volatile關鍵字

===================== (接上文《執行緒基礎:多工處理(18)——MESI協議以及帶來的問題:偽共享》) 4、volatile關鍵字及其使用 4.1、volatile關鍵字使用場景 volatile關鍵字有以下幾大場景: 用於多執行緒狀態下只

執行執行的問題

1、競態條件         當計算結果的正確性取決於相對時間或者排程器控制的多執行緒交叉時,就會發生競態條件。這句話可能對初次接觸執行緒的讀者來說不太好理解,其實競態條件有兩個相對比較好理解的描述,一個是check-then-act,另外一個是read-modify-wr

C# 基礎(十四)C#單例模式首先介紹 單執行執行加鎖 單例模式。然後介紹單例模式的執行同步執行有序訪問共享記憶體。

一、簡介 本篇文章將介紹如何使用單例模式,也就是類的例項化,在整個專案的生命週期內,只例項化一次。在單例模式中,往往可以看到如SourceCode.cs:這樣的結構的。 SourceCode.cs: public class Singleton { private static

執行基礎工處理——Fork/Join框架(基本使用)

1. 概述在進行系統儲存專題的學習、總結、整理和寫作的過程中感覺有點累了,加上最近在做書稿的第二次校稿工作,系統儲存專題的學習和寫作進度明顯有些滯後,特別是編寫的Ceph MON知識點。所以後續1、2個月的時間打算換一個學習整理方向,之後再繼續恢復系統儲存專題的寫作。換一個什

執行基礎工處理(18)——MESI協議以及帶來的問題偽共享

1、概述 本文和後續文章將著眼CPU的工作原理闡述偽共享的解決方法和volatile關鍵字的應用。 2、複習CPU工作原理 2.1、CPU工作原理 要清楚理解本文後續內容,就需要首先重新概述一下JVM的記憶體工作原理。當然JVM的記憶體模型是一個可以專門作為另一

JAVA執行實現的三種方式(繼承Thread類實現Runnable介面使用ExecutorServiceCallableFuture實現有返回結果的執行)

JAVA多執行緒實現方式 JAVA多執行緒實現方式主要有三種:繼承Thread類、實現Runnable介面、使用ExecutorService、Callable、Future實現有返回結果的多執行緒。其中前兩種方式執行緒執行完後都沒有返回值,只有最後一種是帶返回值的。

Java執行(二)——CallableFutureFutureTask

在上一章節我們介紹了Java實現多執行緒最常用的兩種方式,但是那兩種方式實現執行緒的時候並不能返回執行緒的執行結果。然而有些場景我們需要得到執行緒的執行結果,比如要計算每個部門的這個月的工資,然後進行總計(假設有n個部門,計算每個部門的工資需要花費m個小時,計算

java執行池任務提交(RunnableCallableFutureTask

任務的封裝與執行過程 (注:下面所說的Runnable物件,Callable物件都是指實現了該介面的類的物件) 之前要交給執行緒執行的任務我們都把它封裝在Runnable中。對於執行緒池而言,多了一種Callable的封裝方式。 Runnable:其中的run()方法沒有返回值。

執行的其它元件CyclicBarrierCallableFutureFutureTask

public static class CyclicBarrierThread extends Thread { private CyclicBarrier cb; private int sleepSecond; public CyclicBarrierThre

使用ExecutorServiceCallableFuture實現有返回結果的執行 應用例項

  以下是實踐中應用到的多執行緒:    1、controller程式碼:     @RequestMapping(value = "/getTraingingUsersByTrainingIds", method = {RequestMethod.GET, Reque