限速器

package test.date;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import com.google.common.util.concurrent.RateLimiter;
/**
* http://developer.51cto.com/art/201510/495062.htm
**/
public class TestPerSeconds {

	// rate is "2 permits per second"
	final RateLimiter rateLimiter = RateLimiter.create(2.0);

	void submitTasks(List<Runnable> tasks, Executor executor) {
		for (Runnable task : tasks) {
			rateLimiter.acquire(); // may wait
			executor.execute(task);
		}
	}

	public void test() {

		Executor executor = Executors.newFixedThreadPool(2);
		List<Runnable> list = new ArrayList<>();
		for (int i = 0; i < 100; i++) {
			list.add(new RunnableAdapter());
		}
		
		submitTasks(list, executor);
	}

	public static void main(String[] args) {
		new TestPerSeconds().test();
		try {
			System.in.read();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

class RunnableAdapter implements Runnable {

	static int i = 0;

	@Override
	public void run() {
		System.out.println(++i);
	}

}

猜你喜欢

转载自jis117.iteye.com/blog/2328064