创建线程有哪几种方式

发布于:2025-09-06 ⋅ 阅读:(13) ⋅ 点赞:(0)

方法一,直接使用Thread

//创建线程对象
Thread t=new Thread(){
      public void run(){
          //要执行的任务
      }
}

例如:

//构造方法的参数是给线程制定名字,推荐
Thread t1=new Thread(){
     @Override
     //从run方法内实现了要执行的任务
      public void run(){
          System.out.println("running------"");
      }
}
t1.start9);

方法二:使用Runnable配合Thread
把【线程】和【任务】(要执行的代码)分开
*Thread代表线程
*Runnable可运行的任务(线程要执行的代码)

Runnable runnable=new Runnable(){
   public void run(){
       //要执行的任务
   }
}
//创建线程对象
Thread t=new Thread(runnbale);
//启动线程
t.start();

例如

//创建任务对象
Runnable runnable=new Runnable(){
   @Override
   public void run(){
       System.out.println("running------");
   }
}
//参数1是任务对象;参数2是线程名字是,推荐
Thread t2=new Thread(runnbale,"t2");
//启动线程
t2.start();

Java8以后可以使用lambda精简代码

//创建任务对象
Runnable task2=()-> {
System.out.println("running------");
{System.out.println("test------")
};
//参数1是任务对象;参数2是线程名字是,推荐
Thread t2=new Thread(runnbale,"t2");
//启动线程
t2.start();

Runnable接口,重写Thread的run方法

Thread与Runnbale的关系
(1)方法1是吧线程和任务合并在了一起,方法2是把线程和任务分来了
(2)用Runnable更容易与线程池等高级API配合
(3)用Runnable让任务类脱离了Thread继承体系,更灵活

方法3,FutureTask配合Thread
FutureTask能够接收Callable类型的参数我,用来处理有返回结果的情况

FutureTask<Integer> task3=new FutureTask(()->{
     System.out.println("running------");
    return 100;
});

//参数1是任务对象,,参数2是线程名字,推荐
new Thread(task3,"t3").start();

//主线程阻塞,同步等待task执行完毕的结果
Integer result=task3.get();
System.out.println("返回结果是:"+result);

Callable接口是一个有返回结果的接口,里面有个call()方法


FutureTask<Integer> task3=new FutureTask(new Callable<Integer>()->{
   public Integer call() throws Exception{
     System.out.println("running------");
     Thread.sleep(2000);
    return 100;
   }
});

new Thread(task3,"t3").start();

Integer result=task3.get();
System.out.println("返回结果是:"+result);



网站公告

今日签到

点亮在社区的每一天
去签到