runable类:
package thread;
public class LiftOff implements Runnable
{
protected int countDown = 10;// default;
private static int taskCount = 0;
private final int id = taskCount++;
public LiftOff()
{
}
public LiftOff(int countDown)
{
this.countDown = countDown;
}
public String status()
{
return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff!") + "),";
}
@Override
public void run()
{
while (countDown-- > 0)
{
System.out.print(status());
Thread.yield();
}
}
}
相当于普通方法的调用:
package thread;
public class MainThread
{
public static void main(String[] args)
{
LiftOff o = new LiftOff();
o.run();// 相当于调用普通的方法
}
}
普通的创建
package thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/** CachedThreadPool在程序执行中通常会创建与所需数量相同的线程,一般情况下首选 */
public class CachedThreadPool
{
public static void main(String[] args)
{
ExecutorService service = Executors.newCachedThreadPool();
for (int i = 0; i < 5; i++)
service.execute(new LiftOff());
service.shutdown();// 可以防止新任务被提交给这个Executor
}
}
交给执行器创建
package thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/** CachedThreadPool在程序执行中通常会创建与所需数量相同的线程,一般情况下首选 */
public class CachedThreadPool
{
public static void main(String[] args)
{
ExecutorService service = Executors.newCachedThreadPool();
//Executors.newFixedThreadPool(5);// 限制数量的线程池
//Executors.newSingleThreadExecutor();// 相当于线程数量为1的FixedThreadPool
for (int i = 0; i < 5; i++)
service.execute(new LiftOff());
service.shutdown();// 可以防止新任务被提交给这个Executor
}
}