java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)

首先,有比这三种方法更好的启动或者调用线程的方式。你想呀,如果每个打手各自为战,可能就会出现下面几个缺点:

  • 首先,哪个消费者需要打手来看家护院帮自己闯关练级时,倘如每个人都得自己培养一个打手出来,给打手起名字,给买武器…麻烦成啥了
    • 如果有个打手集团,咱们想要叫啥名字的、长啥样的、带啥武器的以及能干啥的指定打手帮咱们看家护院练级闯关,直接打个电话到打手集团去摇人过来帮咱们顾客解决问题,这不香嘛。这不仅是顾客消费文明进步的一小步,也是打手服务文化进步的一大步呀。
    • 上图再看一下:
      java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)
      但是呀,不管是咱们写代码还是面试用,这三个造个线程出来的方法咱们还是过一遍好一点。上菜~
  • 第一种方式,我个人叫他:“从thread类继承,重写run方法”
//咱们自己写的线程类
public class DemoThread extend Thread{
	@Override
	public void run(){
		//......具体逻辑......
	}
}

//模拟一下使用(咱们在main()方法中使用一下咱们自己写的线程类)
public static void main(String[] args){
	DemoThread demoThread = new DemoThread();
	//启动线程
	demoThread.start();
}

老规矩,买一增一
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)
这种方法的好处和坏处如下:
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)

  • 第二种方式,我叫他“实现Runnable接口并重写其中的run()方法”
public class DemoRunnable implements Runnable{
	@Override//step1.自写类中重写run方法
	public void run(){
		//......具体的逻辑......
	}
}

public static void main(String[] args){
	DemoRunnable demoRunnable = new DemoRunnable();//step2.自写类实例化后传入new Thread中
	new Thread(demoRunnable).start;//step3.自写类实例化后引用传入Thread对象后并调用start方法
}

老规矩,买一赠一,上菜:
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)

  • 第三种方式是实现Callable接口(使用FutureTask方式)
    java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)
public class DemoCallable implements Callable<Integer>{
	@Override//step1.自己写的类里面重写call()
	public Integer call(){
		return 123;
	}
}

public static void main(String[] args) throws ExecutionException, InterruptedException {
	//创建异步任务.//step2.将自写类实例化后将引用传入FutureTask中,再实例化FutureTask
	FutureTask<Integer> futureTask = new Future<Integer>(new DemoCallable());
	//step3.再把FutureTask引用传入new Thread中,并启动线程
	new Thread(futureTask).start();

	try{
		//等待任务执行完毕返回结果
		String result = futureTask.get();
		//打印呀或者干啥随你
	} catch(ExceptionException e) {
		e.printStackTrace();
	}
}

胡&敏:怎么除了有个run()方法,还有个call()方法,你得给我解释一下:
author:其实就是个方法嘛,(之前咱们知道要是实现接口或者说继承抽象方法时,必须重写其中的抽象方法),我就拿call()方法举例吧。咱们就看看人家call()方法的源码,看看人家方法使用时有啥特性就行,该对应的就给人家对应上就行了呗。你看这里的call()方法的接口的泛型和方法的返回值类型一致
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)
咱们的使用场景就像下面这样:
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)
Notes:call()方法还有个特异功能,可以缓存结果提高程序执行效率,上图:
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)

胡&敏:中中中,大概按照你这三道程序和图片,以后也能自己用了。不过人家老是说启动线程启动线程,这到底是什么意思。
author:上图
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)

后面的几集的内容大概就是这些:
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part3~整起(线程篇之唠唠启动线程的三种基本方式)
明天同一时间,再见,拜拜~

上一篇:VoIP的话音质量测量方法


下一篇:VoLTE / VoIP 网络电话