Java中的多线程(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36209121/article/details/77054885

前言

Java中实现多线程的方法大体上有三种, 按照平常的使用来说可以分为两类, 一类是没有返回值的, 另一类是可以获得返回值的, 今天在此总结一下.

一, 不需要获得返回值

a. 继承Thread类:

实现多线程的步骤

  • 让其继承Thread类;
  • 然后重写其中的run方法;
  • 实现该类的对象;
  • 调用该对象的start方法, 启动线程;
  • 一个线程对象代表这一个线程, 如果要启动多条线程, 请实现多个对象

代码如下:

public class ThreadMain01 {

    public static void main(String[] args) {
        ThreadTest t1 = new ThreadTest("01");
        ThreadTest t2 = new ThreadTest("02");
        t1.start();
        t2.start();
    }
}

class ThreadTest extends Thread {
    ThreadTest() {}
    ThreadTest(String name) {
        setName(name);
    }

    public void run() {
        System.out.println(getName()+" -- is running");
    }
}

b. 实现Runnable接口:

其实看源码可以知道, Thread类就是实现了Runnable接口重写了其中的run方法, 推荐使用这种方法, 减少了代码的耦合性.
实现步骤:

  • 实现Runnable接口, 重写run方法;
  • 创建一个实例对象;
  • 创建一个Thread的实例对象, 并将Runnable的子类对象作为参数, 传入到Thread的实例对象中;
  • Thread对象调用start方法启动线程,

代码如下

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadMain02 {

    public static void main(String[] args) {
        ThreadRunnable01 tr = new ThreadRunnable01();

        new Thread(tr).start();
        new Thread(tr).start();
    }
}


class ThreadRunnable01 implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+" -- is running");
    }
}

上面是一种通过Thread类来实现多线程的实现步骤, 在平常的使用中我们通常使用线程池来开启多线程, 下面就用到了Executor框架;

  • 实现Runnable接口, 重写run方法;
  • 创建线程池, 获得 ExecutorService 对象;
  • 执行execute方法, 或者submit方法(Runnable的子类对象作为参数传入), 每调用一次相当于调用了一条新的线程执行任务;

代码如下


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadMain02 {

    public static void main(String[] args) {
        ThreadRunnable01 tr = new ThreadRunnable01();

        new Thread(tr).start();
        new Thread(tr).start();
        ExecutorService exe = Executors.newFixedThreadPool(5);
        for(int i=0; i<5; i++) {
            //exe.submit(tr);
            exe.execute(tr);
        }
    }
}


class ThreadRunnable01 implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+" -- is running");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36209121/article/details/77054885
今日推荐