校园网站建设情况汇报湖南省建六公司官网
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:10
当前位置: 首页 > news >正文
校园网站建设情况汇报,湖南省建六公司官网,查二级建造师个人信息查询,小程序模板编辑(1)继承 Tread 类 继承Thread类#xff0c;创建一个新的线程类重写run()方法#xff0c;将需要并发执行的业务代码编写在run()方法中 //继承Thread来创建一个线程类 class MyThread extends Thread{Overridepublic void run(){System.out.println(hello Thread…(1)继承 Tread 类 继承Thread类创建一个新的线程类重写run()方法将需要并发执行的业务代码编写在run()方法中 //继承Thread来创建一个线程类 class MyThread extends Thread{Overridepublic void run(){System.out.println(hello Thread);}public static void main(String[] args) {Thread tnew MyThread();//调用start方法启动线程t.start();} }(2)实现 Runnable 接口 将需要异步执行的业务逻辑代码写在Runnable实现类的run()方法中再将Runnable实例作为target执行目标传入Thread实例其完整步骤如下 定义一个新类实现Runnable接口实现Runnable接口中的run()抽象方法将线程代码逻辑写在该run()实现方法中通过Thread类创建线程对象将Runnable实例作为实际参数传递给Thread类的构造器由Thread构造器将该Runnable实例赋值给自己的target执行目标属性调用Thread实例的start()方法启动线程线程启动之后线程的run()方法将被JVM执行该run()方法将调用target属性的run()方法从而完成Runnable实现类中业务代码逻辑的并发执行 //实现Runnable接口。 class MyRunnable implements Runnable{Overridepublic void run(){System.out.println(hello Thread);}public static void main(String[] args) {Thread tnew Thread(new MyRunnable());t.start();} }缺点 创建的类不是线程类而是线程的target执行目标类需要将其实例作为参数传入线程类的构造器才能创建真正的线程访问当前线程的属性不能直接访问Thread的实例方法必须通过Thread.currentThread()获取当前线程实例 优点 可以避免由于Java单继承带来的局限性。如果异步逻辑所在类已经继承了一个基类就没有办法再继承Thread类。比如当一个Dog类继承了Pet类再要继承Thread类就不行了。所以在已经存在继承关系的情况下只能使用实现Runnable接口的方式。逻辑和数据更好分离。通过实现Runnable接口的方法创建多线程更加适合同一个资源被多段业务逻辑并行处理的场景。在同一个资源被多个线程逻辑异步、并行处理的场景中通过实现Runnable接口的方式设计多个target执行目标类可以更加方便、清晰地将执行逻辑和数据存储分离更好地体现了面向对象的设计思想。 继承Thread和实现Runnable区别 继承Thread类用于多个线程并发完成各自的任务访问各自的数据资源实现Runnable接口用于多个线程并发完成同一个任务访问同一份数据资源数据共享资源需要使用原子类型或者进行线程同步控制 (3)实现 Callable 接口带有返回值 使用Callable和FutureTask创建线程的步骤如下 创建一个Callable接口的实现类并实现其call()方法编写异步执行的具体逻辑可以有返回值使用Callable实现类的实例构造一个FutureTask实例使用FutrueTask实例作为Thread构造器的target入参构造新的Thread线程实例调用Thread实例的start()方法启动线程启动新线程的run()方法并发执行调用FutureTask对象的get()方法阻塞性地获取并发线程执行结果 import java.util.concurrent.Callable; import java.util.concurrent.FutureTask;public class UseCallable implements CallableInteger {Override//call方法可以抛异常像线程里面的run方法最多只能在run方法内trycatchpublic Integer call() throws Exception {//所需要实现的功能代码System.out.print(hello Thread);return 1;}public static void main(String[] args) {UseCallable useCallable new UseCallable();FutureTaskInteger futureTask new FutureTask(useCallable);new Thread(futureTask).start();try {System.out.print(futureTask.get());}catch(Exception e){}} } Callable与Runnable区别 Runnable的唯一抽象方法run()没有返回值也没受检查异常的异常声明Callable接口的call()有返回值并且声明了受检查异常功能更强使用Runnable创建多线程实现Runnable接口的实例作为Thread线程实例的target来使用使用Callable创建多线程使用RunnableFuture作为Thread线程实例的target实例和获取异步执行的结果其实现类是FutureTask (4)线程池创建线程 前面几种方法创建的Thread实例在执行完成之后是不可复用的实际工作中需要对已创建好的线程实例进行复用需要用到线程池。 ExecutorService是Java提供的一个线程池接口每次在异步执行target目标任务的时候可以通过ExecutorService线程池实例去提交或者执行。ExecutorService实例负责对池中的线程进行管理和调度并且可以有效控制最大并发线程数提高系统资源的使用率同时提供定时执行、定频执行、单线程、并发数控制等功能。 import java.util.concurrent.*;public class MultiThread {private static final int MAX_TURN 5;private static final int COMPUTE_TIMES 100000000;private static ExecutorService pool Executors.newFixedThreadPool(3);static class RunnableTask implements Runnable {Overridepublic void run() {for (int i 0; i MAX_TURN; i) {System.out.println(多线程执行第 i 次执行);}}}static class CallableTask implements CallableLong {Overridepublic Long call() throws Exception {long startTime System.currentTimeMillis();System.out.println(多线程执行开始时间为 startTime);Thread.sleep(1000);for (int i 0; i COMPUTE_TIMES; i) {int j i * 10000;}long endTime System.currentTimeMillis();long used endTime - startTime;System.out.println(多线程执行结束用时 used);return used;}}public static void main(String[] args) throws ExecutionException, InterruptedException {pool.execute(new RunnableTask());pool.execute(new Runnable() {Overridepublic void run() {for (int i 0; i MAX_TURN; i) {System.out.println(多线程执行直接实现Runnable);}}});FutureLong future pool.submit(new CallableTask());Long result future.get();System.out.println(异步执行多线程结果为 result);} } 注意实际开发中不会使用Executors创建线程池而是使用ThreadPoolExecutor的构造方法 execute()与submit()区别 接收的参数不一样 submit()可以接收两种入参无返回值的Runnable类型的target执行目标实例和有返回值的Callable类型的target执行目标实例 execute()只接收无返回值的target执行目标实例或者无返回值的Thread实例。 submit()有返回值execute()没有返回值 submit()方法在提交异步target执行目标之后会返回Future异步任务实例以便对target的异步执行过程进行控制比如取消执行、获取结果等。 execute()没有任何返回target执行目标实例在执行之后没有办法对其异步执行过程进行控制只能任其执行直到其执行结束。
- 上一篇: 校园网站建设公司免费网站推广咱们做
- 下一篇: 校园网站建设依据郑州做网站比较专业的机构
相关文章
-
校园网站建设公司免费网站推广咱们做
校园网站建设公司免费网站推广咱们做
- 技术栈
- 2026年04月20日
-
校园网站建设公司seo外包 杭州
校园网站建设公司seo外包 杭州
- 技术栈
- 2026年04月20日
-
校园网站建设方案模板下载网站开发所需配置
校园网站建设方案模板下载网站开发所需配置
- 技术栈
- 2026年04月20日
-
校园网站建设依据郑州做网站比较专业的机构
校园网站建设依据郑州做网站比较专业的机构
- 技术栈
- 2026年04月20日
-
校园网站模版南京设计公司网站
校园网站模版南京设计公司网站
- 技术栈
- 2026年04月20日
-
校园网站设计代码一级域名二级域名区别
校园网站设计代码一级域名二级域名区别
- 技术栈
- 2026年04月20日






