3种启动线程的方式

Posted 2226016500

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3种启动线程的方式相关的知识,希望对你有一定的参考价值。

线程和进程的关系:  一个进程有N个线程

 

1、实现线程的三种方式:

(1)继承thread 类

    [1]创建一个继承thread类的类

    

package Thread01;

public class MyThread extends Thread {
    private int i;

    @Override
    public void run() {
       for (; i < 10; i++) {
         System.out.println(getName()+"\t"+i);
    }
    }
}

 

    [2]创建测试类

package Thread01;

public class MyTest {
    public static void main(String[] args) {
        for (int i = 0; i <10; i++) {
             System.out.println(Thread.currentThread().getName()+"\t"+i+"======");
             if(i==5){
                 
                 MyThread mt2 =new MyThread();
                 MyThread mt =new MyThread();
                 mt2.start();
                 mt.start();
             }
        }
    }
    
    public static long getMemory() {
           return Runtime.getRuntime().freeMemory();
        }
}

 

(2)实现runnable 接口

 

  【1】 实现runnable 接口的类并不是一个线程类,而是线程类的一个target ,可以为线程类构造方法提供参数来实现线程的开启

     

package Thread02;

public class SecondThread implements Runnable{
    private int i;
    public void run() {
        for (; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
            if(i==20)
            {
                System.out.println(Thread.currentThread().getName()+"执行完毕");
            }
        }
    }
}

 

  【2】测试类

package Thread02;

public class MyTest {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
            if(i==5)
            {
                SecondThread s1=new SecondThread();
                Thread t1=new Thread(s1,"线程1");
                Thread t2=new Thread(s1,"线程2");
                t1.start();
                t2.start();
               
            }
        }
    }
}

 

(3)实现callable 接口

  【1】创建callable 实现类

  

package Thread03;

import java.util.concurrent.Callable;

public class Target implements Callable<Integer> {
    int i=0;
    public Integer call() throws Exception {
        for (; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+""+i);
        }
        return i;
    }

}

 

  【2】测试类

  

package Thread03;

import java.util.concurrent.FutureTask;

public class ThirdThread {
     public static void main(String[] args) {
            Target t1=new Target();
            FutureTask<Integer> ft=new FutureTask<Integer>(t1);
            Thread t2=new Thread(ft,"新线程");
            t2.start();
            try {
                System.out.println(ft.get());
            } catch (Exception e) {
                // TODO: handle exception
            }
    }
}

 

以上是关于3种启动线程的方式的主要内容,如果未能解决你的问题,请参考以下文章

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

多线程 Thread 线程同步 synchronized

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

Java多线程-线程创建的3种方式

线程的启动(转)