Java创建线程的第三种方式

创建线程的第三种方式,实现Callable,重写该接口的call方法,call方法不同于run方法,run方法没有返回值,而call方法有返回值;

Java创建线程的第三种方式

     第一步,创建Callable实例,重写call方法

     第二步,将Callable实例传入FutureTask构造器中,得到FutureTask实例

     第三步,创建Thread实例,将FutureTask实例传入Thread构造器中,再让线程就绪

总结:通过继承Thread创建线程与实现Runnable接口与实现Callable接口创建 线程的区别;

  1. 相对而言 继承Thread 创建线程代码是最简单的;
  2. 如果我们的类继承了Thread那就不能再去继承其他类,因为java是单继承,

如果我们通过实现接口Runnable或者Callable来创建线程,我们的类还有权利 去继承其他类;

3.实现Runnable或者Callable接口,可以让多个线程共享同一份资源

4.当我们需要线程执行完毕之后有返回值|信息返回,那么需要 实现 Callable接口。

实例代码如下:

package org.java多线程.Demo01;

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

/**
 * @author 后宫学长
 *创建线程的方式有三种
 *第三种:实现Callable方法,并重写call方法
 */
									//接口范型
public class MyThread_3 implements Callable<Integer> {
	
		public static void main(String[] args) {
			
			//1、创建MyThread_3实例
			MyThread_3 callable = new MyThread_3();
			
			//2、创建FutureTask实例  (FutureTask是Runnable的实现类)
			FutureTask<Integer> future = new FutureTask<>(callable);
			
			
			//创建Thread实例
			Thread thread = new Thread(future);
			//设置线程名字
			thread.setName("线程一");
			//让线程就绪
			thread.start();
			
			
			for(int j = 0; j < 50; j++) {
				//Thread.currentThread():获取当前线程      getName():获取当前线程名字 
				System.out.println("线程的名字是:"+Thread.currentThread().getName()+"=====j====="+j);
			}
				

			try {
				//获取线程执行完毕后的返回值
				int count = future.get();
				System.out.println("count:"+count);
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
			
		}
		/*
		 * 
		 */
		@Override
		public Integer call() throws Exception {
			// TODO Auto-generated method stub
				int count = 0;
				for(int i = 0; i < 50; i++) {
					//Thread.currentThread():获取当前线程      getName():获取当前线程名字 
					System.out.println("线程的名字是:"+Thread.currentThread().getName()+"=====i====="+i);
					count++;
				}
			return count;
		}

}

原创文章,作者:Harem,如若转载,请注明出处:https://www.hgjun.cn/?p=376

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

QQ-501439094

撩一撩:点击这里给我发消息

邮件:501439094@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

隐藏