Callable,Runnable和Thread三种方式创建线程

Posted lchzlp

tags:

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

参考网址:http://blog.csdn.net/xyw591238/article/details/51900325

目录结构如下:

技术分享图片

CallableMethod类

/**
 * 
 */
package test;

import java.util.concurrent.Callable;

/**
*  @author  lei_chunhui
*  @date 2018年2月1日 下午8:42:05
*/
/**
 * @author leichunhui
 *
 * 2018年2月1日
 */
public class CallableMethod implements Callable<String> {

	
	@Override
	public String call() throws Exception {
		System.out.println("callable方式创建线程");
		return null;
	}

}

  RunnableMethod类:

/**
 * 
 */
package test;
/**
*  @author  lei_chunhui
*  @date 2018年2月1日 下午8:27:12
*/
/**
 * @author leichunhui
 *
 * 2018年2月1日
 */
public class RunnableMethod implements Runnable {
	@Override
	public void run() {
		System.out.println("runnable方式创建线程");
	}

}

  ThreadMethod类

/**
 * 
 */
package test;

/**
*  @author  lei_chunhui
*  @date 2018年2月1日 下午8:54:03
*/
/**
 * @author leichunhui
 *
 *         2018年2月1日
 */
public class ThreadMethod extends Thread {
	public void run() {
		System.out.println("继承Thread方式创建线程");
	}
}

  Test测试类

/**
 * 
 */
package test;

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

/**
*  @author  lei_chunhui
*  @date 2018年2月1日 下午8:29:56
*/
/**
 * @author leichunhui
 *
 * 2018年2月1日
 */
public class Test {

	/**   
	*    
	* 描述:TODO   
	* 创建人:leichunhui   
	* 创建时间:2018年2月1日   
	* 修改人:leichunhui   
	* 修改时间:2018年2月1日 
	* 修改备注: 
	* 方法名:main
	* 返回类型:void 
	* @param args 
	* @version    
	*    
	*/
	public static void main(String[] args) {
		// 重写runnable接口的run方法实现
		System.out.println("Runnable方式创建线程开始");
		RunnableMethod runnableMethod1=new RunnableMethod();
		RunnableMethod runnableMethod2=new RunnableMethod();
		Thread thread1=new Thread(runnableMethod1);
		Thread thread2=new Thread(runnableMethod2);
		
		thread1.start();
		thread2.start();
		System.out.println("thread1的线程名字为:"+thread1.getName()+"线程id为:"+thread1.getId());
		System.out.println("thread2的线程名字为:"+thread2.getName()+"线程id为:"+thread2.getId());
		
		System.out.println("Runnable方式创建线程结束");
		System.out.println("Callable方式创建线程开始");
		CallableMethod callableMethod3=new CallableMethod();
		CallableMethod callableMethod4=new CallableMethod();
		
		FutureTask<String> futureTask3=new FutureTask<>(callableMethod3);
		FutureTask<String> futureTask4=new FutureTask<>(callableMethod4);
		
		Thread thread3=new Thread(futureTask3);
		Thread thread4=new Thread(futureTask4);
		
		thread3.start();
		thread4.start();
		System.out.println("thread3的线程名字为:"+thread3.getName()+"线程id为:"+thread3.getId());
		System.out.println("thread4的线程名字为:"+thread4.getName()+"线程id为:"+thread4.getId());
		System.out.println("Callable方式创建线程结束");
		
		
		System.out.println("Thread继承方式创建线程开始");
		ThreadMethod thread5=new ThreadMethod();
		ThreadMethod thread6=new ThreadMethod();
		thread5.start();
		thread6.start();
		System.out.println("thread5的线程名字为:"+thread5.getName()+"线程id为:"+thread5.getId());
		System.out.println("thread6的线程名字为:"+thread6.getName()+"线程id为:"+thread6.getId());
		System.out.println("Thread继承方式创建线程结束");
	}

}

  

结果:

Runnable方式创建线程开始
runnable方式创建线程
thread1的线程名字为:Thread-0线程id为:10
thread2的线程名字为:Thread-1线程id为:11
Runnable方式创建线程结束
Callable方式创建线程开始
runnable方式创建线程
thread3的线程名字为:Thread-2线程id为:12
thread4的线程名字为:Thread-3线程id为:13
callable方式创建线程
callable方式创建线程
Callable方式创建线程结束
Thread继承方式创建线程开始
thread5的线程名字为:Thread-4线程id为:14
继承Thread方式创建线程
继承Thread方式创建线程
thread6的线程名字为:Thread-5线程id为:15
Thread继承方式创建线程结束

 


















以上是关于Callable,Runnable和Thread三种方式创建线程的主要内容,如果未能解决你的问题,请参考以下文章

java 创建线程的三种方法Callable,Runnable,Thread比较及用法

多线程学习记录一继承Thread类和实现Runnable接口Callable接口的区别

java多线程创建-Thread,Runnable,callable和threadpool

多线程-Thread,Runnable,Callable,Future,RunnableFuture,FutureTask

Java并发——Callable和Future接口

Callable,Runnable比较及用法