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的多线程学习,第一记的主要内容,如果未能解决你的问题,请参考以下文章