java的多线程学习,第一记

Posted TaylorLambert

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的多线程学习,第一记相关的知识,希望对你有一定的参考价值。

实现多线程有三种方法

1,继承THread类

import com.sun.org.apache.xpath.internal.SourceTree;

public class test{

    //继承Thread类并重写run方法
    public static class MyThread extends Thread{
        @Override
        public void run(){
            System.out.println("I am a child thread");
        }
    }

    public static void main(String[] args) {
        //创建线程
        MyThread thread = new MyThread();
        //启动线程
        thread.start();
    }


}

2,实现Runable接口

public class test1{

    public static class RunableTask implements Runnable{

        @Override
        public void run(){
            System.out.println("I am a child thread");
        }
    }

    public static void main(String[] args) {
        RunableTask task = new RunableTask();
        new Thread(task).start();
        new Thread(task).start();
    }
}

3,使用FutrueTask方法

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class test2{
    

    public static class CallerTask implements Callable<String>{

        @Override
        public String call()throws Exception{
            return "hello";
        }
    }

    public static void main(String[] args) {
        //create asynchronous task
        FutureTask<String> futureTask = new FutureTask<>(new CallerTask());
        //start thread
        new Thread(futureTask).start();
        try {
            //wait task excute 
            String result = futureTask.get();
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 三种方式的对比优劣:

使用继承方式的好处是,在run()方法内获取当前线程直接使用this就可以了,无须使用Thread.currentThread()方法,不好的地方是Java不支持多线程,如果继承了Thread类,

那么就不能继承其他类了。另外任务与代码没有分离,当多个线程执行一样的任务时需

要多份任务代码,而Runable接口则没有这个限制。

如上面代码所示,两个线程共用一个task代码逻辑,如果需要,可以给RunableTask添加参数

进行任务区分。但是上面两种方式都有一个缺点,就是任务没有返回值。用FutureTask方式是有返回值的

以上是关于java的多线程学习,第一记的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ学习第一记:用java连接RabbitMQ

第85题JAVA高级技术-网络编程4(网络资源的多线程下载)

Java的多线程学习

什么是JAVA的多线程?

学习java第19天个人总结

Java第八周学习总结