java多线程中常见问题小结:
1、java中实现多线程的几种方法:
- 继承Thread类;
- 实现Runnale接口;
- 实现Callable接口,通过FutureTask包装器来创建Thread;
- 使用线程池;
package com.test;
import java.util.concurrent.*;
public class ThreadTest4 implements Callable {
@Override
public Object call() throws Exception {
System.out.println("test1");
return "test";
}
public static void main(String[] args){
ThreadTest4 threadTest4 = new ThreadTest4();
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future future=executorService.submit(threadTest4);
try {
System.out.println(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executorService.shutdown();
}
}
回显:
test1
test
2、如何停止一个线程?
- run方法正常退出;
- 使用stop强行终止;(已过期,不推荐)
- 使用inerrupt方法终止;
3、interrupted和isInterrupted方法的区别?
- Thread.interrupted是静态方法,会把中断状态清零。
- isInterrupted是非静态方法,只会查询中断状态,不会改变中断状态;
package com.test;
import java.net.HttpCookie;
public class ThreadTest5 implements Runnable{
@Override
public void run() {
int i=0;
while (true){
if (Thread.currentThread().isInterrupted()){
System.out.println("test1:"+Thread.currentThread().isInterrupted());
}
if (Thread.interrupted()){
System.out.println("test2:"+Thread.currentThread().isInterrupted());
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i++);
}
}
public static void main(String[] args){
ThreadTest5 t = new ThreadTest5();
Thread thread = new Thread(t, "testInterrupt");
thread.start();
thread.interrupt();
}
}
回显:
test1:true
test2:false
0
1
2
4、什么是线程安全?
线程安全就是说,多线程访问同一代码,不会产生不确定的结果。
5、java线程池中的submit()和execute()方法有什么区别
- execute是定义在Executor接口中,返回值是void.
- submit是定义在ExecutorService接口中,扩展了Executor接口,可以返回持有计算结果的Future.
6、常用线程池。
- newSingleThreadExecutor:创建一个单线程的线程池,此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
- newFixedThreadPool:创建一个固定大小的线程池,每次提交任务就创建一个线程,知道线程达到线程池的最大大小。
- newCachedThreadPool:创建一个可缓存的线程池,此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统能够创建的最大县城大小。
- newScheduledThreadPool:创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。
- newSingleThreadExecutor:创建一个大小乘的线程池。
更多内容请关注微信公众号“外里科技”
官方公众号 | 外里科技 |
运营公众号 | 英雄赚 |
微信 | wxid_8awklmbh1fzm22 |
1247408032 | |
开源代码 | https://gitee.com/B_T/beimi |