Java中的多线程

来源:互联网 发布:软件质量保证书范本 编辑:程序博客网 时间:2024/06/06 06:57

  要想了解多线程首先腰线了解什么是进程,什么是线程。

进程

  进程是具有独立功能的程序,是系统调度和资源分配的基本单元。具有动态,并发, 独立的特性。

线程

  线程是进程的组成单元,是进程内部的执行单元,进程就是由若干个线程组成的,线程共享进程的资源。

多线程

  java语言提供了并发机制,程序员可以在程序中执行多个线程, 每个线程完成一个功能,并与其它线程并发执行,这种并发机制就是多线程。
多线程的实现有两种方式: 

  • 通过集成Thread类,重写run()方法,其中线程的功能代码就卸载run()方法中。最后执行start()运行。
  • 实现Runnable接口。建立一个Runnable的对象,使用Runnable对象的构造方法创建Thread实例。然后启动start()方法。

比较继承Thread类创建多线程和实现Runnable创建多线程的优缺点:

  1. 由于java是单继承, 继承Thread类之后将不能够继承其他类。而实现Runnable接口后仍然可以继承类和实现其他接口。
  2. 实现Runnable接口创建多线程,便于实现线程共享进程的资源。

用继承Thread类实现多线程:

public class MyThread extends Thread{    @Override    public void run() {        while(true){            System.out.println("我是一个线程我正在运行!");            try {                Thread.sleep(500);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }           }}public class Testthread {    public static void main(String[] args) {        MyThread mt = new MyThread();        System.out.println("我是主线程!");        mt.start();        while(true){            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            System.out.println("主线程的进程结束了!");        }    }}

实现Runnable创建多线程:

public class BankRunnable implements Runnable {    private int money = 100;    private String s ="youren";     @Override    public void run() {        synchronized (s) {            if(money>0){                            System.out.println(Thread.currentThread().getName()+"取到了现金"+money+"元");                money=money-100;                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            else if(money==0){                System.out.println(Thread.currentThread().getName()+"没有取到了现金");            }        }    }}public class TestRunnable {    public static void main(String[] args) {        BankRunnable runnable = new BankRunnable();        Thread t1 = new Thread(runnable, "小红");        Thread t2 = new Thread(runnable,"小名");        t1.start();        t2.start();    }}

运行结果:
这里写图片描述

0 0