Java多线程(一)概述及创建

  支持多线程是Java语言的特性之一,多线程使程序可以同时存在多个执行片段,根据不同的条件和环境同步或异步工作。线程与进程的实现原理类似,但它们的服务对象不同,进程代表操作系统平台中运行的一个程序,而一个程序中将包含多个线程。

  进程:

  通常将正在运行的程序成为进程,现在计算机基本都支持多进程操作,比如使用计算机可以边上网,边听音乐,然而计算机上只有一块CPU,实际上,并不能同时运行这些进程,CPU实际上是利用不同时间片段去交替执行每个进程,由于转换速度很快,使人感觉像是在同时运行。

  线程:

  在一个进程内部也可以执行多任务,可以将进程内部的任务称之为线程,线程是进程中的实体,一个进程可以拥有多个线程。

  线程必须拥有父进程,系统没有为线程分配资源,它与进程中的其他线程共享该进程的系统资源。如果一个进程中的多个线程共享相同的内存地址空间,这就意味着这些线程可以访问相同的变量和对象,这让线程之间共享信息变得更容易。

  线程的创建:

  在Java语言中,线程也是一种对象,但并不是任何对象都可以成为线程,只有实现Runnable接口或者继承了Thread类的对象才能成为线程。以下是线程创建的两种方式:

  (一)继承Thread类

  1.常用方法:

    Thread类中的常用方法包括start()、interrupt()、join()、run()方法等。其中start()和run()方法最常用,start()方法用于启动线程,run()方法为线程的主题方法,读者可以根据需要覆写run()方法。

  2.构造方法:   

public Thread();//默认构造方法,无参
public Thread(Runnable target);//基于Runable对象的构造方法,将线程的业务逻辑交由参数所传递的Runnable对象去实现
public Thread(ThreadGroup group, Runnable target);//ThreadGroup类表示一组线程,基于Runnable对象和线程分组对象的构造方法
public Thread(String name);//指定线程名称的构造函数,参数name将作为新创建的线程对象的名称
public Thread(ThreadGroup group, String name);//指定线程组别和线程名称
public Thread(Runnable target, String name);//基于Runnable对象并指定线程名称的构造方法
public Thread(ThreadGroup group, Runnable target, String name);//指定线程组别、名称和Runnable对象
public Thread(ThreadGroup group, Runnable target, String name,long stackSize);//指定线程分组、名称、Runnable对象和堆栈大小

  3.实例:

    在Java语言中要实现线程功能,可以继承java.lang.Thread类,这个类已经具备了创建和运行线程的所有必要架构,通过覆写Thread类中的run()方法,以实现用户所需要的功能,实例化自定义的Thread类,使用start()方法启动线程。

/**
 * 继承Thread类创建SimpleThread线程类,该类将创建的两个线程<br>
 * 同时在 控制台输出信息,从而实现两个任务输出信息的交叉显示
 */
public class SimpleThread extends Thread {
    // 构造方法,参数为线程名称
    public SimpleThread(String name) {
        setName(name);
    }
    // 覆盖run()方法
    public void run() {
        int i = 0;
        while (i++ < 5) {
            try {
                System.out.println(this.getName() + "执行步骤" + i);
                sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        SimpleThread thread1 = new SimpleThread("线程1");
        SimpleThread thread2 = new SimpleThread("线程2");
        thread1.start();
        thread2.start();
    }
}

    执行结果

  (二)实现Runnable接口

  实现Runnable接口的类就可以成为线程,Thread类就是因为实现了Runnable接口所以才具有了线程的功能。Runnable接口只有一个方法就是run()方法,实现Runnable接口后必须覆写run()方法。

public class Thread implements Runnable {}
public interface Runnable { public abstract void run(); }

  从本质上来讲,Runnable是java语言中用以实现线程的接口,任何实现线程功能的类都必须实现这个接口。Thread类就是因为实现了该接口,所以继承Thread的类才具有了相应的线程功能。

  虽然可以使用继承Thread类的方式实现线程,但是由于在java语言中,只能继承一个类,如果用户定义的类已经继承了其他类,就无法再继承Thread类,也就无法使用线程,于是java语言为用户提供了java.lang.Runnable接口,实现这个接口和继承Thread类具有相同的效果在实例化一个Thread对象时,可以传入一个实现Runnable接口的对象作为参数,Thread类会调用Runnable对象的run()方法,继而执行run()方法中的内容。

  实例:

/**
 * 创建SimpleRunnable类,该类实现了Runnable接口,并在run()方法中<br>
 * 每间隔0.5秒,在控制台输出一个"*"字符,直到输出15个"*"字符。
 */
public class SimpleRunnable implements Runnable {
    // 覆写run()方法
    public void run() {
        int i = 15;
        while (i-- >= 1) {
            try {
                System.out.print("*");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        Thread thread1 = new Thread(new SimpleRunnable(), "线程1");
        thread1.start();
    }
}

  执行结果

 

本文内容多参考书本知识,随笔记下来学习分享且方便以后查看。 

posted @ 2018-01-13 01:08  maxudong  阅读(227)  评论(0编辑  收藏  举报