Java 多线程举例

Java 多线程举例

进程和多线程是两个基本的执行单元

Java线程示例

每个应用程序至少有一个线程-主线程。main 是一个Java线程,可以从中创建多个线程。

Java线程的好处

  • 与进程相比,Java Thread是轻量级的,创建线程需要的时间和资源更少。
  • 线程共享父进程数据和代码
  • 线程之间的上下文切换比进程之间的切换代价更少
  • 线程互通比进程互通更快

Java提供了两种方式传感线程

  • java.lang.Runnable
  • java.lang,Thread

Java 线程示例,实现Runnable接口

为了使得类可以运行,可以实现 java.lang.Runnable接口并在public void run()方法中提供实现。
若要将此类用作Thread,需要通过传递Runnable对象来创建Thread对象,然后调用start() 方法来运行

Java线程示例,继承Thread 类

我们可以扩展 java.lang.Thead类来创建自己的java线程类和覆盖run()方法。然后通过创建它的对象和调用start()方法来执行定义的java类的run方法

Runnable vs Thread

如果类提供更多功能而不是仅仅作为Thread运行,则应该使用Runnable,如果类的目的单一的使用Thread运行,则可以直接使用Thread类。

实现Runnable是首先,Java支持实现多个接口,如果扩展Thread类,不能扩展其他类。

ExtendingThreadClass.java

package coreofjava.javathread.javarunnable;


/**
 * Thread 实现 线程
 *
 *  from https://www.journaldev.com/1016/java-thread-example
 */

public class ExtendingThreadClass extends Thread {
    public ExtendingThreadClass(String name) {
        super(name);
    }

    public void run() {
        System.out.println("Extending Thread Class - Start" + Thread.currentThread().getName());
        try {
            Thread.sleep(1000);
            doDBProcessing();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Extending Thread Class End" + Thread.currentThread().getName());
    }

    private void doDBProcessing() throws InterruptedException {
        Thread.sleep(5000);
    }
}

RunnableTest.java

package coreofjava.javathread.javarunnable;


/**
 * 通过Runnable实现线程
 *
 *  from https://www.journaldev.com/1016/java-thread-example
 */
public class RunnableTest implements Runnable {

    @Override
    public void run() {
        System.out.println("线程 - 开始 " + Thread.currentThread().getName());
        try {
            Thread.sleep(1000);
            System.out.println("进行一些处理");
            doDBProcessing();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("线程 - 结束 " + Thread.currentThread().getName());
    }

    public void doDBProcessing() throws InterruptedException {
        Thread.sleep(5000);
    }
}

Test.java

package coreofjava.javathread.javarunnable;


public class Test {
    public static void main(String[] args) {
        ExtendingThreadClass etc1 = new ExtendingThreadClass("T1");
        ExtendingThreadClass etc2 = new ExtendingThreadClass("T2");
        System.out.println("开始执行 Thread");
        etc1.start();
        etc2.start();
        System.out.println("Thread 已经开始执行");
        Thread t1 = new Thread(new RunnableTest(), "T3");
        Thread t2 = new Thread(new RunnableTest(), "T4");
        System.out.println("开始 Runnable");
        t1.run();
        t2.run();
        System.out.println("Runnable Start");
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 10,532评论 0 23
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,064评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,186评论 1 15
  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    小徐andorid阅读 7,830评论 3 53
  • 从2017年5月份知道聆听,做为阿里云大学的认证工程师,刚好负责公司客户的技术对接,积累了一些使用建议,就在聆听平...
    vinningFly阅读 4,212评论 0 1