并发(一)

it2022-05-27  72

Java 如何实现并发?

1.继承Thread类

2.实现Runnable接口

3.实现Callable接口

 

Thread类

Thread类实现了Runnable接口,Thread类中有这么几个重要的方法:

1.run()这个方法是Thread实现了Runnable接口中的抽象方法,是用来实现并发逻辑,开启后run()中的逻辑将会并发执行。

2.start()这个方法是用来开启该对象中run()实现的并发逻辑。

同时Thread类中重载了不同参数的构造方法。

1.无参构造,配合继承Thread的类使用。

2.带有一个Runnable接口参数的构造方法,配合实现Runnable接口的类使用。

 

public class Threads extends Thread{

  public void run(){

    //并发逻辑

  }

  public static void main(String[] args){

    Thread th = new Threads();

    th.start();//并发开启

  }

}

 

public class Threads implements Runnable{

  public void run(){

    //并发逻辑

  }

  public static void main(String[] args){

    Thread th = new Thread(new Threads);

    th.start();//并发开启

  }

}

 

Callable接口

如果想要并发任务完成后,返回一个返回值,需要实现Callable接口。

该接口只有一个抽象方法:call(),这个方法等同于Runnable接口中的run(),只是多了一个返回值。

这个接口具有泛型参数,实现接口时,确定好返回值的类型。

public class Threads extends Callable<String>{

  public String call(){

    //并发逻辑

    return String;

  }

}

 

Executor(执行器)

Executor 是一个接口 他只有一个抽象方法 void execute(Runnable) 这个方法需要一个Runnable类型的对象。

ExecutorService 也是一个接口,他继承了Executor接口,扩充了Executor接口的功能。

ThreadPoolExecutor 是一个类,他继承了实现ExecutorService接口的抽象类,实现了ExecutorService接口的功能,他有几个重要的方法:

1. execute(Runnable),和Thread类中start()一样,开启一个线程执行这个Runnable对象中run()中的任务。

2.submit(Callable),这个方法是Callable对象开启线程的方法,这个方法具有返回值,他返回的是一个Future对象。

ThreadPoolExecutor 不能直接创建对象,需要使用Executors的静态方法创建对象。

1.Executors.newCachedThreadPool()

2.Executors.newFixedThreadPool(int)

3.Executors.newSingleThreadExecutor()

这三种方法都可以创建ThreadPoolExecutor对象,但是他们之间有区别。

第一种是建立一个带有缓冲功能的线程池,不会限定线程池里面线程的个数,在只有少量线程的时候,开销很少,

第二种是建立一个固定大小的线程池,会先创建线程,当任务数量大于这个线程池的线程数是,多余的任务会等待,等到有空余的线程之后,在执行。

第三种是建立一个只有一条线程的线程池。

 

关于线程优先级

线程的优先级对于线程执行来讲,并不是特别重要,这和具体的jvm实现有关。

currentThread()获取当前线程对象

getPriority()得到现在这个线程的优先级

setPriority()修改这个线程的优先级

在主线程中创建的线程的优先级默认和主线程一致。

 

关于后台线程和用户线程

后台线程是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分(来自java编程思想)。

当所有用户线程结束的时候,程序终止。

在线程启动之前,调用setDaemon()方法,该线程变为后台线程。

在后台线程中创建的线程都是后台线程。

 

转载于:https://www.cnblogs.com/xiaosuye/p/10259994.html


最新回复(0)