java线程创建的4种方法
2021/5/20 1:25:43
本文主要是介绍java线程创建的4种方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java线程
创建线程的方法
- 继承 Thread 类
- 实现 Runnable 接口
- 实现 Callable 接口
- 使用ThreadPool创建
线程常用的方法
public void run()
public void start()
thread.join()
等待该线程死亡Thread.currentThread().getName()
获取当前线程的名称Thread.currentThread().setName("主线程");
设置当前线程的名称
线程的实现
继承 Thread 类
public class MyTest01 { public static void main(String[] args) { Thread.currentThread().setName("主线程"); System.out.println(Thread.currentThread().getName()+":"+"我是主线程"); //创建一个新线程 ThreadDemo1 thread1 = new ThreadDemo1(); //为线程设置名称 thread1.setName("线程一"); //开启线程 thread1.start(); } } class ThreadDemo1 extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName()+":"+"我是线程一"); } }
实现 Runnable 接口
public class MyTest02 { public static void main(String[] args) { Thread.currentThread().setName("主线程"); System.out.println(Thread.currentThread().getName()+":"+"我是主线程"); //创建一个新线程 Thread thread2 = new Thread(new ThreadDemo2()); //为线程设置名称 thread2.setName("线程二"); //开启线程 thread2.start(); } } class ThreadDemo2 implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + ":" + "我是线程二"); } }
实现 Callable 接口
public class MyTest03 { public static void main(String[] args) throws Exception{ Thread.currentThread().setName("主线程"); System.out.println(Thread.currentThread().getName()+":"+"我是主线程"); //创建FutureTask的对象 FutureTask<String> task = new FutureTask<String>(new ThreadDemo3()); //创建Thread类的对象 Thread thread3 = new Thread(task); thread3.setName("线程三"); //开启线程 thread3.start(); //获取call()方法的返回值,即线程运行结束后的返回值 String result = task.get(); System.out.println(result); } } class ThreadDemo3 implements Callable<String> { @Override public String call() throws Exception { System.out.println(Thread.currentThread().getName()+":"+"我是线程三"); return Thread.currentThread().getName()+":"+"结束返回值"; } }
使用ThreadPool创建
public class MyTest04 { public static void main(String[] args) throws InterruptedException { Long start = System.currentTimeMillis(); final Random random = new Random(); final List<Integer> list = new ArrayList<>(); ExecutorService executorService = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10000; i++){ executorService.execute(new Runnable() { @Override public void run() { list.add(random.nextInt()); } }); } executorService.shutdown(); executorService.awaitTermination(1, TimeUnit.DAYS); System.out.println("时间:" + (System.currentTimeMillis()-start)); System.out.println("大小" + list.size()); } }
使用线程池的好处
- 通过重复利用已创建的线程降低线程创建和销毁造成的消耗
- 当任务到达时,任务可以不需要的等到线程创建就能立即执行
- 线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
这篇关于java线程创建的4种方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南