2016年10月02日

ThreadPool JDK5

メモしとこ。

JDK5から使えるスレッドプールの実装。

スレッド管理のわずらわしさから開放される。
以下のサンプルはMachineクラスがたまにアホになり無限ループする。
たぶんjextractとjdmpviewの勉強用に作ったサンプルだったと思う。


import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class test
{
    public static void main(String[] argv)
    {
        ExecutorService threadPool = Executors.newFixedThreadPool(5);
        
        Collection<Callable<Void>> processes = new LinkedList<Callable<Void>>();
        for(int i=0 ; i < 5; i++)
        {
            final Machine m = new Machine(i);
                processes.add(new Callable<Void>() {
                    @Override
                    public Void call() {
                        m.exec();
                        return null;
                    }
                });
        }
        
        try {
            threadPool.invokeAll(processes);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            threadPool.shutdown();
        }
    }
}
Machine.java



public class Machine
{
    private  int id=0;
    
    public Machine(int _id)
    {
        this.id = _id;
        
    }
    
    public void exec()
    {
        for(int i =0;i<id;i++)
        {
            System.out.println("Machie("+this.id+"): run count -> " + i + ".");
        }
        
        //3の倍数のときだけアホになる
        if(id%3==0)
        {
            for(int i=0;i<id;i++)
                if(i!=3) i=0;
        }
    }
}



cf


posted by koteitan at 17:05| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック