Java多线程之如何创建多线程?

Wesley13
• 阅读 732

Java与多线程的关系

我们平时写的好多简单程序就有多个线程参与,你可能会感到惊讶,但是事实就是这样。

Java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上Java程序天生就是多线程程序,因为执行main()方法的是一个名称为main的线程。

下面我们来用Java的一个管理类验证一下:

Java多线程之如何创建多线程?
Console结果如下:

Java多线程之如何创建多线程?
可以看出来,一个Java程序得到运行不仅仅是main()方法的运行,而是main线程和多个其他线程的同时执行。

我们为什么要用多线程?

从三个角度来说这个事情

资源利用率

随着CPU的核心数越来越多,计算机的性能越来越高,但是值得考虑的是,我们该如何利用好多个核心。

线程是大多数操作系统调度的基本单元,一个程序作为一个进程来运行,程序运行过程中能够创建多个线程,而一个线程在一个时刻只能运行在一个处理器核心上。

试想一下,一个单线程程序在运行时只能使用一个处理器核心,那么再多的处理器核心加入也无法显著提升该程序的执行效率。相反,如果该程序使用多线程技术,将计算逻辑分配到多个处理器核心上,就会显著减少程序的处理时间。

程序执行效率

有时,我们会编写一些复杂的代码,例如:一笔订单的创建,它包括插入订单数据、生成订单快照、发送邮件通知卖家和记录 货品销售数量等。用户从单击“订购”按钮开始,就要等待这些操作全部完成才能看到订购成 功的结果。但是这么多业务操作,如何能够让其更快地完成呢?
在上面的场景中,如果我们利用多线程技术,将数据一致性不强的操作派发给其他线程处理(也可以使用消息队列),如生成订单快照、发送邮件等。这样做的好处是响应用户请求的线程能够尽可能快地处理完成,缩短了响应时间,提升了用户体验。

再比如,我们写一个爬虫,去获取一个大型网站上的数据,单线程比较慢吧,合理的使用多线程会是爬取速度变得更加快。

在Java中创建多线程

在Java中有两种创建方式

  • 继承Thread类
  • 实现Runnable接口

两种方式都需要重写run()方法,最后用start()方法让该线程进入就绪状态。

继承Thread类方式

实例化线程:直接new即可。

package blog;
class ThreadTest extends Thread{
    //继承Thread类,重写run()方法
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"执行Run中");
        System.out.println(Thread.currentThread().getName()+"执行完毕");
    }
}
public class ExtendThread{
    public static void main(String[] args) {
        new ThreadTest().start();
        new ThreadTest().start();
        new ThreadTest().start();
        new ThreadTest().start();
        new ThreadTest().start();
    }
}

执行结果:

Java多线程之如何创建多线程?

实现Runnable接口方式

实例化线程:用Thread的构造方法

Java多线程之如何创建多线程?

package blog;
class ThreadTest implements Runnable{
    //实现Runnable接口,实现run()方法
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"执行Run中");
        System.out.println(Thread.currentThread().getName()+"执行完毕");
    }
}
public class ExtendThread{
    public static void main(String[] args) {
        ThreadTest runnable = new ThreadTest();
        new Thread(runnable).start();
        new Thread(runnable).start();
        new Thread(runnable).start();
        new Thread(runnable).start();
        new Thread(runnable).start();
    }
}

执行结果和上边类似,可能执行顺序不一致,这涉及到后面的知识(请看下一节)。

创建线程的两种方式的对比

程序开发中多以实现Runnable接口为主。

实现接口比继承线程类有一些优势

  • 可以避免由于Java的单继承性特性而带来的局限。
  • 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
  • 适合多个相同程序代码的线程区处理同一资源的情况。
点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java多线程测试性能,总线程使用总时间。
前段时间在做java多线程,然后涉及到了一个效率的问题。  java多线程中,所有线程执行完毕,总共使用多少时间呢?importjava.util.concurrent.CountDownLatch;  countDwonlatch提供了最常用的一些测试方法。创建一个countDownLatch对象:CountDown
Wesley13 Wesley13
3年前
java多线程学习
   Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent,提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。从这篇blog起,我将跟大家一起共同学习这些新的Java多线程构件1\.CountDownLatch   我们先来学习一下JDK1.5API中关于这个类的
Wesley13 Wesley13
3年前
java多线程方法笔记【上】
刚开始工作,主要使用c写服务器,不过偶尔也会用到java和python,还是学一学吧。先从java多线程开始。java多线程的基本方法://线程开始运行 public void start( );  //线程运行的方法runpublic void run( );  //线程休眠,单位毫秒 
Wesley13 Wesley13
3年前
java并发编程的艺术之Java并发基础
为什么要使用多线程Java天生就是多线程程序,简单的一个main()方法的执行,其实是由main线程和其它的线程共同执行的。当然使用多线程有如下的好处:    1、利用更多的处理器核心    2、更快的响应速度,如将数据一致性不强的操作交给其它的线程去操作    3、更好的编程模型线程简介一、
Wesley13 Wesley13
3年前
Java线程知识深入解析(2)
多线程程序对于多线程的好处这就不多说了。但是,它同样也带来了某些新的麻烦。只要在设计程序时特别小心留意,克服这些麻烦并不算太困难。(1)同步线程许多线程在执行中必须考虑与其他线程之间共享数据或协调执行状态。这就需要同步机制。在Java中每个对象都有一把锁与之对应。但Java不提供单独的lock和unlock操作。它由高层的结构隐
Wesley13 Wesley13
3年前
Java高级教程02
\TOC\1.Java线程1.1.多线程和多进程多进程:操作系统能够同时进行多个任务:每个app(word,播放器,浏览器)可以同时运行多线程:同一应用程序中哟多个顺序流同时执行线程是进程中的一部分1.2.线程的执行过程:!(
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Python并发(二)
并发是指一次处理多件事,而并行是指一次做多件事。二者不同,但互相有联系。打个比方:像Python的多线程,就是并发,因为Python的解释器GIL是线程不安全的,一次只允许执行一个线程的Python字节码,我们在使用多线程时,看上去像很多个任务同时进行,但实际上但一个线程在执行的时候,其他线程是处于休眠状态的。而在多CPU的服务器上,Java或Go的多线程,
Wesley13 Wesley13
3年前
Java线程与多线程
1线程与多线程1.1线程是什么?线程(Thread)是一个对象(Object)。用来干什么?Java线程(也称JVM线程)是Java进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。Java程序采用多线程方式来支持大量的并发请求处理,程序如果在