线程创建的四种方式

提示:除了Thread、Runnable之外,你还不知道的线程创建方式——线程池、Callable

一、Thread

1.线程创建步骤

  • 创建类NumberThread,并继承Thread类:class NumberThread extends Thread{}
  • 重写run()方法:public void run(){}
  • 创建NumberThread对象:NumberThread  num=new NumberThread()
  • 启动程序:num.start()(start()方法会自动调用run()方法)

2.代码演示

package com.zcl.test;

class NumberThread extends Thread{

    public void run(){
        for(int i=0;i<100;i++){
            if(i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }

        }
    }

}



public class ThreadMethodTest {

    public static void main(String[] args) {
        NumberThread h1=new NumberThread();

        h1.start();

       
        }
  
}

二、Runnable

1.线程创建步骤

  • 创建Runnable接口的实现类:class  NumberRunnable implements Runnable{}
  • 重写run()方法:public void run(){}
  • 创建NumberRunnable的对象:NumberRunnable  num=new NumberRunnable()
  • 创建Thread类的对象,并把num作为参数:Thread thread=new Thread(num)
  • 启动线程:thread.start()

2.代码演示

class NumberRunnable implements Runnable{

    public void run(){

       for(int i=0;i<100;i++){
            if(i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }

        }
   }

}


public class RunnableTest {
    public static void main(String[] args) {
            
        NumberRunnable  num=new NumberRunnable();
        Thread thread=new Thread(num);
        thread.start()
        
    }




}

三、Callable

1.线程创建步骤

  • 创建Callable接口的实现类:class  NumberCallable implements Callable{}
  • 重写call()方法,可以有返回值:public Object call(){}
  • 创建NumberCallable的对象:NumberCallable num=new NumberCallable()
  • 创建FutureTask类的对象,并把num作为对象传递过去:(futureTask.get()获取返回值)
    FutureTask futureTask= new FutureTask(num)
  • 创建Thread类的对象,并把futureTask作为参数:Thread thread=new Thread(num)
  • 启动线程:thread.start()

2.代码演示

class NumThread implements Callable{

    public Object call() throws Exception{
        int sum=0;
        for(int i=1;i<=100;i++){
            if(i%2==0){
                System.out.println(i);
                sum+=i;
            }
        }
        return sum;
    }
}
public class ThreadNew {
    public static void main(String[] args) {
        NumThread numThread=new NumThread();
       FutureTask futureTask= new FutureTask(numThread);

       new Thread(futureTask).start();
        try {
            //get()返回值即为FutureTask构造器参数Callable实现类重写的call()的返回值
            Object sum=futureTask.get();
            System.out.println("总和为:"+sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

}

四、线程池

1.线程创建步骤

  • 提供指定线程数量的线程池:ExcutorService service=Excutors.newFixedThreadPool(n);
  • 执行指定的线程的操作。需要提供实现Runnable接口或Callable接口实现类的对象: service.execute(new XxxRunnable()):适用于Runnable接口实现类的对象      service.submit(new XxxCallable()):适用于Callable接口实现类的对象
  • 关闭连接池:  service.shutdown();

2.代码演示

class NumberThread implements Runnable{
    @Override
    public void run() {
        for(int i=0;i<=100;i++){
            if(i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}




public class ThreadPool {
    public static void main(String[] args) {
        ExecutorService service=Executors.newFixedThreadPool(10);
        service.execute(new NumberThread());//适用于Runnable
        //service.submit();//适用于Callable

        service.shutdown();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值