java8多线程_Java8多线程的启动⽅法
⼀、进程与线程的区别
总:操作系统执⾏多任务,每个任务就是进程;进程执⾏多任务,每个任务就是线程;包含关系
分:
1.调度性:在引⼊线程的OS中,把线程作为调度和分派的基本单位,把进程作为资源拥有的基本单位
2.并发性:在引⼊线程的OS中,不仅进程间可以并发执⾏,⼀个进程的多个线程之间也可以并发执⾏
3.拥有资源:进程是拥有资源的基本单位,线程除了拥有⼀点运⾏中必不可少的资源(线程控制块,程序计数器,⼀组寄存器值和堆栈)外,本⾝基本没有系统资源,但是可以访问进程的资源。
4.创建或撤销进程时系统都要为它分配或回收资源,进程切换所要保留的现场信息也多于线程。由于⼀个进程的线程间共享同⼀地址空间和打开⽂件,因此它们的同步与通信更加容易。
⼆、多线程的启动⽅法
1、继承Thread:重写run()⽅法,调⽤start()启动线程
public class TestThread extends Thread
{
@Override
public void run()
{
//写⼊具体⽅法
//getName()是实例⽅法,返回当前线程名
System.out.println(getName());
//currentThread()是类⽅法,返回正在执⾏的线程对象
Thread.currentThread();
}
public static void main()
{
TestThread thread = new TestThread();
一个线程可以包含多个进程thread.start();
}
}
2、实现Runnable接⼝创建线程类
public class TestRunnable implements Runnable
{
public void run()
{
/
/写⼊具体⽅法
}
public static void main()
{
//1.以接⼝实现对象和线程名作为构造函数的参数
TestRunnable runnable = new TestRunnable();
Thread thread1 = new Thread(runnable,"thread1");
thread1.start();
//2.Lambda表达式创建线程
Thread thread2 = new Thread(()->{
//写⼊具体⽅法
},"thread2");
thread2.start();
//3.匿名类创建线程
Thread thread3 = new Thread(new Runnable()
{
@Override
public void run()
{
//写⼊具体⽅法
}
},"thread3");
thread3.start();
}
}
Tip:设置Android Studio⽀持Lambda表达式的⽅法
3、使⽤Callable和Future创建线程
⽤法与Runnable⼤同⼩异,Callable接⼝提供call()⽅法,⽀持返回值并可以抛出异常;Future接⼝代表Callable接⼝⾥call()的返回值。Lambda表达式⽅法不再举例
public class TestCallableFuture
{
public static void main()
{
FutureTasktask = new FutureTask(
new Callable()
{
@Override
public Integer call() throws Exception
{
return null;
}
}
);
new Thread(task,"有返回值的线程").start();
try
{
/**
* get⽅法获取call()的返回值,该⽅法造成程序阻塞,等⼦线程执⾏结束获得返回值* 可以传⼊等待时间(时长,时间单位),超出时间抛出TimeoutException异常
*/
System.out.().toString());
System.out.(1000,TimeUnit.MILLISECONDS).toString());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
4.⼩结:使⽤2、3⽅法可以使多个线程共享⼀个target对象,推荐
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论