Java进阶必备之多线程编程

 更新时间:2021年05月17日 10:23:27   作者:布小禅  
今天带大家来学习java多线程编程,文中有非常详细的代码示例及介绍,对正在学习java多线程的小伙伴们很有帮助,需要的朋友可以参考下

一、图示

在这里插入图片描述

二、多线程编程

何为多线程,通俗的讲就是让你的代码同时干好几件事。

而我们的一个代码文件或者一个项目就是一个进程,而如果我们想提高效率,我们可以多开几个文件进行多进程,也可以在进程中创建多线程(多写几个方法),但是多进程比较耗费资源,所以一般推荐多线程,在代码里,让代码做几个文件做的事。

多线程编程可以让我们的代码拥有更高效率。

三、线程的工作过程

犹如上图

使用多线程需要先创建一个或者多个线程

然后让线程调用CPU资源,开始运行

然后运行完毕等待所有线程运行完毕

然后删除资源,结束线程

Java线程拥有优先级

优先级就是系统确定线程的调度顺序,但是不执行顺序,因为多线程的执行是具有无序性的。

调度顺序只是系统分配资源的顺序,不分配资源就无法执行。

四、创建多线程

如何在Java代码中创建多线程,Java内置了用于多线程的库。

1.继承Thread类,重写run()方法

我们需要写一个类A来继承Thread类,并重写run()方法。

run()方法里面放我们需要进行多线程的代码。

然后再在主类中实例化类A的对象,并且调用strat方法。

public  class TheadText  {
    public static void main(String[] args) {
        //实例化StartThread,并调用start方法使线程动起来
        StartThread t1 = new StartThread("一  ");
        t1.start();
        StartThread t2 = new StartThread("二  ");
        t2.start();
        StartThread t3 = new StartThread("三  ");
        t3.start();
        StartThread t4 = new StartThread("四  ");
        t4.start();
    }
}

/**
 * 1.继承Thread类并重写run方法
 */
 class StartThread extends Thread{

     String name;
     StartThread(String name){
         this.name = name;
     }
    @Override
    public void run() {

       System.out.println(name+1);
       System.out.println(name+2);
       System.out.println(name+3);
       System.out.println(name+4);
       System.out.println(name+5);
     }
 }

运行结果(还可以体现线程的无序性):

2. 实现接口Runnable接口,实现run方法

使用Runnable接口避免了单继承的局限性,线程类只是实现了 Runnable 接口,还可以继承其他类

public  class TheadText  {
    public static void main(String[] args) {
		StartRunnable startRunnable1 = new StartRunnable("  一  ");
        Thread te1 = new Thread(startRunnable1);
        te1.start();
        StartRunnable startRunnable2 = new StartRunnable("  二  ");
        Thread te2 = new Thread(startRunnable2);
        te2.start();
        StartRunnable startRunnable3 = new StartRunnable("  三  ");
        Thread te3 = new Thread(startRunnable3);
        te3.start();
        StartRunnable startRunnable4 = new StartRunnable("  四  ");
        Thread te4 = new Thread(startRunnable4);
        te4.start();
	}
}
/**
 * 2. 实现Runnable接口,实现run方法
 */
 class StartRunnable implements Runnable{
     String name;
//     重载一下方法,利于区分
     StartRunnable(String name){
         this.name = name;
     }
     @Override
     public void run() {
         System.out.println(name+1);
         System.out.println(name+2);
         System.out.println(name+3);
         System.out.println(name+4);
         System.out.println(name+5);
     }

 }

运行结果:

在这里插入图片描述

3. 实现Callable接口,实现call方法

这个我研究了挺大一会儿。

实现这个接口后,还需要实现call方法

然后通过FutureTask类来对我们实例化对象进行封装

最后还要实例化Thread类进行start操作开启我们的线程

代码演示:

public  class TheadText  {
    public static void main(String[] args) {
        //先实例化
        StartCallable a = new StartCallable();
        //然后调用FutureTask类
        FutureTask<String> te1 = new FutureTask<>(a);
        //设置我们的name属性
        a.name = "  一  ";
        //开启我们的线程一
        new Thread(te1).start();
        StartCallable b = new StartCallable();
        FutureTask<String> te2 = new FutureTask<>(b);
        b.name = "  二  ";
        new Thread(te2).start();
        StartCallable c = new StartCallable();
        FutureTask<String> te3 = new FutureTask<>(c);
        c.name = "  三  ";
        new Thread(te3).start();
        StartCallable d = new StartCallable();
        FutureTask<String> te4 = new FutureTask<>(d);
        d.name = "  四  ";
        new Thread(te4).start();

    }
}
/**
 * 实现Callable接口,实现call方法
 */
 class StartCallable implements Callable<String>{
     String name ;
     public String call() throws Exception{
         System.out.println(name+1);
         System.out.println(name+2);
         System.out.println(name+3);
         System.out.println(name+4);
         return name;
     }
 }

运行结果:

在这里插入图片描述

线程的生命周期

线程在我们创建后(出生)等待CPU的资源分配,然后开始工作,在工作完我们分配的工作后,就会(死亡)消失

到此这篇关于Java进阶必备之多线程编程的文章就介绍到这了,更多相关Java多线程编程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在java中http请求带cookie的例子

    在java中http请求带cookie的例子

    今天小编就为大家分享一篇在java中http请求带cookie的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 聊聊springboot中整合log4g2的问题

    聊聊springboot中整合log4g2的问题

    这篇文章主要介绍了springboot中整合log4g2的方法,自定义文件名需要在application.yml中配置,在config中配置log4g2.xml文件,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • 使用Spring Security控制会话的方法

    使用Spring Security控制会话的方法

    在本文中,我们将说明Spring Security如何允许我们控制HTTP会话。这篇文章主要介绍了使用Spring Security控制会话 ,需要的朋友可以参考下
    2019-05-05
  • 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

    在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

    这篇文章主要介绍了在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java邮件通知工具类

    java邮件通知工具类

    这篇文章主要为大家详细介绍了java邮件通知工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 使用WebUploader实现上传文件功能(一)

    使用WebUploader实现上传文件功能(一)

    这篇文章主要为大家详细介绍了使用WebUploader实现上传文件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • SpringBoot集成Lettuce客户端操作Redis的实现

    SpringBoot集成Lettuce客户端操作Redis的实现

    本文主要介绍了SpringBoot集成Lettuce客户端操作Redis的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 解决jpa查询语句自动变成了update的问题

    解决jpa查询语句自动变成了update的问题

    这篇文章主要介绍了解决jpa查询语句自动变成了update的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java调用oracle分页存储过程示例

    java调用oracle分页存储过程示例

    这篇文章主要介绍了java调用oracle分页存储过程,需要的朋友可以参考下
    2014-03-03
  • java并发编程StampedLock高性能读写锁详解

    java并发编程StampedLock高性能读写锁详解

    这篇文章主要为大家介绍了java并发编程StampedLock高性能读写锁的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论