jdk提供了 3 种方法创建线程:
public class ThreadRuning extends Thread{
public ThreadRuning(String name){
//重写构造,可以对线程添加名字
super(name);
}
@Override
public void run() {
while(true){
System.out.println("good time");
//在run方法里,this代表当前线程
System.out.println(this);
}
}
public static void main(String[] args){
ThreadRuning threadRuning = new ThreadRuning("1111");
threadRuning.start();
}
}
public class RunableTest implements Runnable {
@Override
public void run() {
while (true) {
System.out.println("good time");
}
}
public static void main(String[] args) {
RunableTest runableTest1 = new RunableTest();
RunableTest runableTest2 = new RunableTest();
new Thread(runableTest1).start();
new Thread(runableTest1).start();
new Thread(runableTest2).start();
}
}
public class CallTest implements Callable {
@Override
public Object call() throws Exception {
return "hello world";
}
public static void main(String[] args){
FutureTask<String> futureTask = new FutureTask<String>(new CallTest());
new Thread(futureTask).start();
try {
String result = futureTask.get();
System.out.println(result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
线程状态可分为以下几种:
各个状态的流转关系如下图所示:
Executor框架提供创建线程池的方法ThreadPoolExecutor,该方法有以下这些重要参数:
当往线程池中提交任务时,如果运行线程数小于corePoolSize,那么马上创建线程运行这个任务;如果正在运行的线程数大于等于corePoolSize,那么将这个任务放进队列;;如果队列放满了,且正在运行的线程数小于maximumPoolSize,那么就创建线程处理任务;如果队列放满了,正在运行的线程数大于等于maximumPoolSize,那么会抛出异常 RejectExecutionException,执行拒绝策略。
同时Executor框架还提供了四个简单的构造方法:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。