Java中的多线程(1)

来源:互联网 发布:js读取div内容 编辑:程序博客网 时间:2024/05/18 01:35

前言

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");    }}
原创粉丝点击