今天给大家讲解下多线程的的用例。希望能帮到大家,请看下面的列子,谢谢!
-
线程池的使用
public static ExecutorService newFixedThreadPool(int nThreads);
得到一个线程对象,初始化参数是要求的当前线程池中的线程数
public Future submit(Runnable target);
从线程池中获取一个线程对象,并且执行给定的Runnable接口实现类对象作为执行目标
演示代码
package com.qfedu.b_executors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class MyThread1 implements Runnable {
@Override
public void run() {
System.out.println("Runnable接口实现类,线程目标代码");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 明天吃土豆牛腩");
}
}
public class Demo1 {
public static void main(String[] args) {
// 1. 创建线程池对象
ExecutorService service = Executors.newFixedThreadPool(5);
// 2. 创建一个MyThread1 Runnable接口实现类对象、
MyThread1 target = new MyThread1();
// 3. 使用线程池对象中的一个线程,指定目标代码
// 初始化线程数为5,这里使用的是线程池中已经存在的5个线程来执行代码
service.submit(target);
service.submit(target);
service.submit(target);
service.submit(target);
service.submit(target);
// 因为原本的5个线程都在被使用中,这里需要等待5个线程执行完毕,出现空闲线程
// 来执行对应的目标代码
service.submit(target);
service.submit(target);
// 4. 关闭线程池
// 一般不用关闭线程池,会随着程序的退出而关闭
// service.shutdown();
}
}
-
Lambda表达式
2.1 Lambda表达式思路service.submit(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } });
匿名内部类方式来作为线程池执行目标代码
1. 这个方法需要的参数是Runnable接口的实现类对象
2. Runnable接口目标是为了提供一个run 方法, What will be run
3. What will be run??? where??? run方法内容
这里需要Runnable提供Run方法,提供Run方法方法体
“说重点”
需要Run方法方法体
2.2 Lambda表达式格式
service.submit(() ->
System.out.println(Thread.currentThread().getName()));
( ) ->
System.out.println(Thread.currentThread().getName())
Lambda表达式
( ) 参数列表
-> 做什么事情,就是对应方法体
箭头之后的代码就是正常语句
(参数列表) -> {代码语句}
2.3 Lambda表达式使用前提
有且只有一个缺省属性为public abstract方法的接口,例如 Comparator接口,Runnable接口
使用lambda表达式是有一个前后要求约束的
方法的参数为接口类型,
或者说局部变量使用调用方法,方法的参数为接口类型。
可以使用lambda也OK
来源:CSDN
作者:tofacebook点com
链接:https://blog.csdn.net/cyhlili100/article/details/104650375