创建线程的三种方式

继承Thread类

继承Thread类,重写里面的run()方法。启动线程调用类的start()方法。

不是调用run()方法,调用run()方法是普通的调用类的方法的过程,即先执行run()方法,在执行下面的语句,而调用start()方法是告诉cpu要执行run()方法,程序接着向下执行,具体run()方法什么时候执行,看cpu怎么分配

package ThreadClass;
/**
 * 创建线程
 * TODO
 * @version 1.0
 * @author 王星宇
 */
public class StartThread extends Thread{
	
	@Override
	public void run() {
		for(int i = 0;i < 20;i++) {
			System.out.println("听歌");
		}
	}
	public static void main(String[] args) {
		StartThread  st = new StartThread();
		st.start();//不保证立即运行
		for(int i = 0;i < 20;i++) {
			System.out.println("敲代码");
		}
	}
}

实现runnable接口

实现runnable接口,在启动线程时,要新建一个Thread类(因为一般这个Thread类只用一次,所以可以定义为匿名类),把实现runnable接口的类作为参数传进去,调用Thread类的start()方法。这里的Thread对象叫做静态代理。

因为java的单继承性,为了防止出现继承了Thread类不能继承其他类的情况出现,一般用实现runnable接口的方法来创建一个简单的线程

package ThreadClass;
/**
 * 第二种实现多线程的方法
 * TODO
 * @version 1.0
 * @author 王星宇
 */
public class StartThread2 implements Runnable{

	@Override
	public void run() {
		for(int i = 0;i < 20;i++) {
			System.out.println("听歌");
		}
	}

	public static void main(String[] args) {
		StartThread2 st2 = new StartThread2();
		new Thread(st2).start();
		for(int i = 0;i < 20;i++) {
			System.out.println("写代码");
		}
	}
}

实现Callable接口

  • 第三种方式很少用,麻烦,但是安全,一般用于大型项目。
  • 实现Callable接口,泛型为call()方法的返回值。
  • 在启动线程时,有四步(创建执行任务,提交执行,获取结果,关闭服务)
package ThreadClass;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * 第三种创建线程的方式
 * TODO
 * @version 1.0
 * @author 王星宇
 */
public class StartThread3 implements Callable<Boolean>{
	String name;
	public StartThread3(String name) {
		this.name = name;
	}
	@Override
	public Boolean call() throws Exception {
		for(int i = 0;i < 20;i++) {
			System.out.println(name);
		}
		return true;
	}
	
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		StartThread3 st31 = new StartThread3("听歌");
		StartThread3 st32 = new StartThread3("写代码");
		StartThread3 st33 = new StartThread3("看视屏");
		
		//创建执行任务
		ExecutorService ser = Executors.newFixedThreadPool(3);
		//提交执行
		Future<Boolean> result1 = ser.submit(st31);
		Future<Boolean> result2 = ser.submit(st32);
		Future<Boolean> result3 = ser.submit(st33);
		//获取结果
		boolean r1 = result1.get();
		boolean r2 = result2.get();
		boolean r3 = result3.get();
		System.out.println(r1 + " "  + r2 + " " +r3);
		//关闭服务
		ser.shutdownNow();
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值