1. 程式人生 > >java 多執行緒 等待返回

java 多執行緒 等待返回

方法1:

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
  
public class Main {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch doneSignal = new CountDownLatch(100);
        ExecutorService e = Executors.newFixedThreadPool(100);
        for (int i = 0; i < 100; i++) {
            e.execute(new A(doneSignal));
        }
        doneSignal.await();// wait for all to finish
        System.out.println("OK!");
        e.shutdown();
    }
}
  
class A implements Runnable {
    private CountDownLatch doneSignal;
  
    public A(CountDownLatch doneSignal) {
        this.doneSignal = doneSignal;
    }
  
    public void run() {
        System.out.println("test");
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        doneSignal.countDown();
    }
}


方法2:

		ExecutorService exec = Executors.newCachedThreadPool();
		
		List<ImageUploadRunnable> tasks = new ArrayList<ImageUploadRunnable>();
		tasks.add(new ImageUploadRunnable(180, savefile,url));
		tasks.add(new ImageUploadRunnable(100, savefile,url));
		tasks.add(new ImageUploadRunnable(60, savefile,url));
		tasks.add(new ImageUploadRunnable(30, savefile,url));
		List<Future<String>> futureList = exec.invokeAll(tasks, 8l, TimeUnit.SECONDS);
		//
		
		for (int i = 0, size = futureList.size(); i < size; i++) {

			Future<String> fu = futureList.get(i);
			String s = fu.get(3l, TimeUnit.SECONDS);
			System.out.println(s);
		}
					
		exec.shutdown();

public class ImageUploadRunnable implements Callable<String> {
	
	private File file;
	private int num;
	private String url;
//	private CountDownLatch doneSignal;
	
	public ImageUploadRunnable(int num, File file, String url){
		this.num = num;
		this.file = file;
//		this.doneSignal = doneSignal;
		this.url = url;
	}

	
	public String call() throws Exception {

		String result = "aaaa";
		return result;
	}

}


主要用的是CountDownLatch 的特性

方法2:主要用的是exec.invokeAll

相關推薦

java 執行 等待返回

方法1: import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;

java 執行等待、喚醒機制例項

例子: 1、實體類 public class Student {     String name;     int age;     boolean flag = false; // 表示沒有值 } 2、執行緒1 public class SetThread impleme

java 執行等待與喚醒機制

java 併發程式設計網站 :http://ifeve.com/java-7-concurrency-cookbook/ 一: 1:JVM執行緒狀態 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED

Java執行等待所有執行結束(CountDownLatch/CyclicBarrier)

本文主要是參考官方文件做一學習用途。 官方連結: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html http://docs.oracle.com/javase/1.5.0/docs/a

java執行等待強制喚醒——interrupt

/* 停止執行緒: 1,stop方法。 2,run方法結束。 怎麼控制執行緒的任務結束呢? 任務中都會有迴圈結構,只要控制住迴圈就可以結束任務。 控制迴圈通常就用定義標記來完成。 但是如果執行緒處於了凍結狀態,無法讀取標記。如何結束呢? 可以使用interrupt(

Java執行返回值的Callable介面

Java多執行緒帶返回值的Callable介面 在面試的時候,有時候是不是會遇到面試會問你,Java中實現多執行緒的方式有幾種?你知道嗎?你知道Java中有可以返回值的執行緒嗎?在具體的用法你知道嗎?如果兩個執行緒同時來呼叫同一個計算物件,計算物件的call方法會被呼叫幾次你知道嗎?如果這些你知道,那麼凱哥(

Java執行學習筆記(五) 使用Condition實現等待/通知

使用Condition實現等待/通知 1. 使用Condition 1.1 MyService 1.2 ThreadA 1.3 Test 1.4 執行結果 1.5 方法對比 2. 使用多個Condition實

Java執行--讓主執行等待執行執行完畢

參考連結:https://www.cnblogs.com/eoss/p/5902939.html 使用Java多執行緒程式設計時經常遇到主執行緒需要等待子執行緒執行完成以後才能繼續執行,那麼接下來介紹一種簡單的方式使主執行緒等待。 java.util.concurrent.CountDown

java執行等待喚醒機制(wait-notify)

wait()、notify()、notifyAll()方法 Object類裡面提供了這幾個方法: wait():讓當前執行緒處於等待(阻塞狀態),直到其他執行緒呼叫此物件的notify()或noti

java執行執行的通訊、喚醒等待機制、生產消費者模式、Lock

執行緒的通訊:印表機列印–不斷的輸入輸出 package com.qianfeng.test; /* * 執行緒的通訊: * 分析: * 需要兩個執行緒--輸入執行緒和輸出執行緒 * 需要兩個任務--輸入任務和輸出任務 * 需要一份資料 * *

Java執行執行返回

                對於Java多執行緒的理解,我以前僅僅侷限於實現Runnable介面或者繼承Thread類,然後重寫run()方法,最後start()呼叫就算完事,但是一旦涉及死鎖以及對共享資源的訪問和隨時監控執行緒的狀態和執行順序等等就不行了,所以現在開始看Thinking in java的

java執行 demo ,包含帶返回值的Callable和不帶返回值的Runnable

輸入int,利用callable取得double值,再用runnable列印 import java.util.concurrent.*; public class TestMultiThread { private static ExecutorService pool = nul

Java執行生產者與消費者等待喚醒機制(示例)

在下面新建的兩條執行緒,兩條執行緒操作的物件都是學生類,一條執行緒生產學生物件的資料,一條執行緒消費學生物件的資料,且做到,有資料才消費,沒資料就等待,沒資料就生產,有資料就等待。 第一個案例是學生類物件,非常的簡單就定義了兩個成員變數,以及一個用於喚醒執行緒的標記。 成員變數預設會賦值

java執行Future、FutureTask使用示例,返回非同步的結果

1、Future、FutureTask介紹 Future是一個介面,該介面用來返回非同步的結果。 FutureTask是一個類,是Future 的一個實現。 2、主要方法 future.get(); 或者 future.get(10000, Ti

初學Java執行:從執行返回資料的兩種方法

從執行緒中返回資料和向執行緒傳遞資料類似。也可以通過類成員以及回撥函式來返回資料。但類成員在返回資料和傳遞資料時有一些區別,下面讓我們來看看它們區別在哪。 一、通過類變數和方法返回資料 使用這種方法返回資料需要在呼叫start方法後才能通過類變數或方法得到資料。讓我們先來看

Java執行知識點總結——進階篇(八) 之 等待喚醒機制 Lock 鎖升級版

JDK1.5 中提供了多執行緒升級解決方案。 將同步 Synchronized 替換成現實 Lock 操作。 將Object中的 wait、notify、notifyAll,替換成了C

Java執行--同步與死鎖:synchronized;等待與喚醒:wait、notify、notifyAll;生命週期

class Info{ // 定義資訊類 private String name = "李興華"; // 定義name屬性 private String content = "JAVA講師" ; // 定義content屬性 private boolean flag = false ; // 設

Java 執行 執行互相等待 CyclicBarrier

先介紹一下JDK內容: java.util.concurrent 類 CyclicBarrier java.lang.Object 繼承者 java.util.concurrent.CyclicBarrier ----------------------------

Java執行之三volatile與等待通知機制示例

原子性,可見性與有序性 在多執行緒中,執行緒同步的時候一般需要考慮原子性,可見性與有序性 原子性 原子性定義:一個操作或者多個操作在執行過程中要麼全部執行完成,要麼全部都不執行,不存在執行一部分的情況。 以我們在Java程式碼中經常用到的自增操作i++為例,i++實際上並不是一步操作,而是首先對i的值加一,然

java 執行—— 執行等待與喚醒

第1部分 wait(), notify(), notifyAll()等方法介紹   在Object.java中,定義了wait(), notify()和notifyAll()等介面。wait()的作用是讓當前執行緒進入等待狀態,同時,wait()也會讓當前執行緒釋放它所