创建线程的三种方法分别是:1、继承Thread方法;2、实现Runnable接口;3、实现Callable接口和Future。
本文操作环境:windows10系统、java 1.8、thinkpad t490电脑。
具体方法:
一、是继承Thread方法;
首先继承Thread方法,重写Thread的run()方法
public class MyThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub //super.run(); doSomething(); } private void doSomething() { // TODO Auto-generated method stub System.out.println("我是一个线程中的方法"); } }
在main()方法里创建一个MyThread对象,调用该对象的start()方法,start()方法会通过对系统底层的一系列操作,创建出一个相应的线程,与当前线程并发执行。如果直接调用run()方法,程序将执行完run()方法后才会执行main()方法中后面的代码,这样就是单线程执行而不是多线程并发执行了。
public class NewThread { public static void main(String[] args) { MyThread myThread=new MyThread(); myThread.start();//开启一个线程方法 //以下的方法可与上边的线程并发执行 doSomething(); } private static void doSomething() { // TODO Auto-generated method stub } }
二、是实现Runnable接口;
使用Runnable接口与继承Thread类的用法相似
public class RunnableThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub doSomeThing(); } private void doSomeThing() { // TODO Auto-generated method stub System.out.println("我是一个线程方法"); } }
不同的是,实现Runnable接口的类中没有start()方法,所以要用Thread构造个方法开启线程
public class NewThread { public static void main(String[] args) { Runnable runnable=new RunnableThread(); Thread thread=new Thread(runnable); thread.start();//开启一个线程方法 //以下的方法可与上边的线程并发执行 doSomething(); } private static void doSomething() { // TODO Auto-generated method stub } }
三、是实现Callable接口和Future创建线程
首先创建Callable接口的实现类CallableThread,实现call()方法,并且有返回值。Callable接口是一个带泛型的接口,泛型的类型就是线程返回值的类型。实现Callable接口中的call()方法,方法的返回类型与泛型的类型相同。
public class CallableThread implements Callable<String>{ @Override public String call() throws Exception { // TODO Auto-generated method stub doSomeThing(); return "需要返回的值"; } private void doSomeThing() { // TODO Auto-generated method stub System.out.println("我是线程中的方法"); } }
Callable不能直接获取返回值,需要用FutureTask<V>在外部封装一下再获取返回值
public class NewThread { public static void main(String[] args) { Callable<String> callable=new CallableThread(); FutureTask<String> futureTask=new FutureTask<String>(callable); Thread thread=new Thread(futureTask); thread.start();//开启一个线程方法 //以下的方法可与上边的线程并发执行 doSomething(); try { futureTask.get();//获取线程返回值 } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void doSomething() { // TODO Auto-generated method stub } }
以上就是创建线程的三种方法分别是什么的详细内容,更多请关注易知道|edz.cc其它相关文章!