首页 > 编程知识 正文

java线程池创建的四种,java创建多线程

时间:2023-05-04 05:07:28 阅读:14979 作者:2515

一、继承Thread类创建线程类

实现步骤:1.定义继承thread的类并重写thread类中的run方法。 run方法的方法主体是线程完成的任务

2 .创建该类的实例对象

3 .调用线程对象的start方法来启动线程。

二.通过实现Runnable接口

1 .定义类以实现Runnable接口

2 .创建该类的实例对象obj

3 .将obj作为结构参数传递给Thread类实例对象。 这个对象才是真正的线程对象

4 .调用线程对象的start方法来启动线程

三.通过Callable接口创建线程

从JAVA 5开始,JAVA提供了可调用接口,这是Runnable接口的扩展版本。 Callable接口以线程执行体的形式提供call (方法,但call )方法比run (调用)方法更强大,call (调用)方法的功能如下:

1、call ) )方法可以有返回值;

2、call ) )方法可以声明抛出异常;

Callable接口是JAVA中新添加的接口,不是Runnable接口的子接口,因此Callable对象不能直接成为Thread的目标。 另一个原因是获取call (方法具有返回值,而不是直接调用call ) (在此为call ) )方法的返回值,而是将其作为线程执行体调用。

因此,JAVA5提供一个Future接口,该接口表示Callable接口中的call ()方法的返回值,向Future接口提供实现Future接口的FutureTask实现类

publicclasscallabletestimplementscallable {

公共字符串调用(throws exception )。

返回世界';

}

staticvoidmain (字符串[ ] args ) {

futuretasktask=newfuturetask (newcallabletest ) );

newthread(task ).start );

system.out.println(task.get );

}

}

上述方式的优缺点

通过继承Thread类实现多线程:

好处:

1、实现简单且要获取当前线程,可以直接使用this获取当前线程,而无需调用Thread.currentThread ()方法。

缺点:

1、线程类已经继承了Thread类,不能继承其他类

2、多个线程不能共享同一资源(如前面分析的成员变量I );

实现Runnable接口或Callable接口以实现多线程:

好处:

1、线程类只是实现了接口,也可以继承其他类

2、多个线程可以使用同一target对象。 适用于多个线程处理相同资源的情况。

缺点:

1 .用这种方式实现多线程,与第一种方式相比编程更复杂

2、要访问当前线程,必须调用Thread.currentThread ()方法。

第四种方法:使用线程池提交任务并创建线程

使用线程池的优点:

1 .线程池允许您重用线程以减少创建和销毁线程的开销

2 .任务到达时,不需要等待线程创建,而是直接执行。 提高响应速度

3 .线程池允许统一线程分配、优化和监视,以避免过多地占用系统资源。

start方法和run方法的区别:

指示只有在调用start方法时才调用线程,多线程并发的特性,即run方法的代码在不同线程中交替执行。 如果只是调用run方法,则代码将同步执行,并且必须等待run方法中的所有代码执行,然后才能继续执行调用run方法的线程中的代码

Runnable接口和Callable接口的区别:

Runnable接口的run方法的返回值是void,它只是简单地执行run方法的代码,执行是否完成,执行了多少? 我不知道。 我们所能做的只是等待这个多线程任务完成。 Callable Future接口可以获取多线程执行的结果。 如果线程很久没有返回,也可以取消结果。

wait方法立即解除锁定,而notify/notifyAll方法在线程的其馀代码执行之前不会解除对象锁定

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。