多线程的几种实现方式

您所在的位置:网站首页 linux多线程的实现方式是什么 多线程的几种实现方式

多线程的几种实现方式

2024-07-11 22:27| 来源: 网络整理| 查看: 265

上篇文章总结了下关于线程池很干,很干的干货,这次想着顺便连其他实现多线程的三种方式也汇总下吧!

java多线程的几种实现方式:

1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3.通过Callable和FutureTask创建线程 4.通过线程池创建线程  (上一篇已经讲过了)

前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果  后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个方法的返回值是Object,所以返回的结果可以放在Object对象中

方式1:继承Thread类的线程实现方式如下:

public class ThreadDemo01 extends Thread{     public ThreadDemo01(){         //编写子类的构造方法,可缺省     }     public void run(){         //编写自己的线程代码         System.out.println(Thread.currentThread().getName());     }     public static void main(String[] args){          ThreadDemo01 threadDemo01 = new ThreadDemo01();          threadDemo01.setName("我是自定义的线程1");         threadDemo01.start();                System.out.println(Thread.currentThread().toString());       } }

程序结果:  Thread[main,5,main]  我是自定义的线程1

线程实现方式2:通过实现Runnable接口,实现run方法,接口的实现类的实例作为Thread的target作为参数传入带参的Thread构造函数,通过调用start()方法启动线程

public class ThreadDemo02 {     public static void main(String[] args){          System.out.println(Thread.currentThread().getName());         Thread t1 = new Thread(new MyThread());         t1.start();      } } class MyThread implements Runnable{     @Override     public void run() {         // TODO Auto-generated method stub         System.out.println(Thread.currentThread().getName()+"-->我是通过实现接口的线程实现方式!");     }    }

程序运行结果:  main  Thread-0–>我是通过实现接口的线程实现方式!

线程实现方式3:通过Callable和FutureTask创建线程  a:创建Callable接口的实现类 ,并实现Call方法  b:创建Callable实现类的实现,使用FutureTask类包装Callable对象,该FutureTask对象封装了Callable对象的Call方法的返回值  c:使用FutureTask对象作为Thread对象的target创建并启动线程  d:调用FutureTask对象的get()来获取子线程执行结束的返回值

public class ThreadDemo03 {     /**      * @param args      */     public static void main(String[] args) {         // TODO Auto-generated method stub         Callable oneCallable = new Tickets();         FutureTask oneTask = new FutureTask(oneCallable);         Thread t = new Thread(oneTask);         System.out.println(Thread.currentThread().getName());         t.start();     } } class Tickets implements Callable{     //重写call方法     @Override     public Object call() throws Exception {         // TODO Auto-generated method stub         System.out.println(Thread.currentThread().getName()+"-->我是通过实现Callable接口通过FutureTask包装器来实现的线程");         return null;     }    }

程序运行结果:  main  Thread-0–>我是通过实现Callable接口通过FutureTask包装器来实现的线程

线程实现方式4:通过线程池创建线程

public class ThreadDemo05{     private static int POOL_NUM = 10;     //线程池数量     /**      * @param args      * @throws InterruptedException       */     public static void main(String[] args) throws InterruptedException {         // TODO Auto-generated method stub         ExecutorService executorService = Executors.newFixedThreadPool(5);           for(int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3