java多线程 [1]

    技术2022-05-19  19

    线程是在操作系统中是一个非常常见的词

    线程具有非常多的进程所具有的特征,所以又称为轻型进程或进程元,相应的把传统进程称为重型进程,传统进程相当于只有线程的任务,引入了线程的OS中通常一个进程拥有若干个线程,至少也有一个线程。

    线程的状态有以下几种:执行状态,表示线程正获得处理机儿运行;就需状态,指线程已具备了各种执行状态条件,一旦获得CPU便可执行的状态;阻塞状态,指线程在执行中因某事儿受阻,处于暂停执行的状态。

    几乎每一种语言都对多线程提供了支持,当然java也不例外。

    一:创建  在java中线程的创建有两种方法:①继承Thread类;②实现Runnable接口

    首先说一些这两种实现方式的区别:

    ①Thread类在API中的定义是这样的,public class Thread extends Object implements Runnable

    可以看到,Thread类是实现了Runnable接口的,Runnable接口中只有一个方法,就是public void run(){}这个方法,而在Thread里面有很多的方法,除了重写了run方法之外还有四个构造方法,public void start(){}等方法。

    这就说明这个线程类比这个接口更多的关于线程的操作。

    ②当我们需要实现一个线程的时候,但恰恰这个时候它已经有了一个父类,由于java是单继承的,所以我们不能再继承一个Thread类了,这个时候就只好实现Runable接口了。

    ③当我们定义了一个实现了Runable接口的类的对象的时候,我们可以开启多个线程,而实现了Thread类的对象就不行了(它只能调用start方法一次)。

    二:执行

    需要说明的是:在每一个j2SE程序中自始自终都至少运行着两个线程,他们分别是main线程,也就是主线程,还有一个是垃圾回收器线程。

    在java中,线程的执行是通过调用start方法来执行的,并不是run方法,start方法在Thread类中定义了,假设我们直接调用run方法,这个时候只是把他当做一个普通的方法来调用了,并没有启动线程。由start方法来调用run方法。

    线程的执行是非常随机性的,如果有多个线程存在调用了start方法只是让它在线程队列中等待,并不一定会马上执行,在线程的世界里没有按程序顺序执行这一说。

    public class TestThread {

    public static void main(String[] args) {

    test a=new test("A");

    test b=new test("B");

    test c=new test("C");

    a.start();

    b.start();

    c.start();

    }

     

    }

    class test extends Thread{

     

    private String name;

    public test(String str){

    this.name=str;

    }

    public void run(){

    System.out.println("我是线程:"+name);

    }

    }

    运行之后出现了很多个结果,并不是想象中的ABC.

     


    最新回复(0)