java并发多线程,线程的创建启动

来源:互联网 发布:mp3伴奏提取软件 编辑:程序博客网 时间:2024/04/26 20:56

【简述】

java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例。

每个线程的任务就是完成一定的任务,实际上就是执行一段程序流。

 

【创建并启动多线程的步骤(集成Thread类方式)】

1.定义继承Thread类的子类,重写run方法:run()方法就代表了线程需要完成的任务,故run()方法称为:线程执行体。

2.创建线程对象:即创建Thread子类的实例。

3.启动线程:调用线程对象的start()方法来。

 

【示例代码FirstThread.java】

复制代码
package com.Higgin.part01;//1.1定义继承Thread类的子类FirstThreadclass FirstThread extends Thread{    //1.2重写run方法    public void run(){        for(int i=0;i<10;i++){            //注意:当线程继承Thread类时,直接使用this.getName()即可获得当前线程的名字            System.out.println(this.getName()+"===="+i);        }    }}public class Demo1{    public static void main(String[] args) {        //2.创建线程对象        FirstThread t1=new FirstThread();        //3.启动线程        t1.start();        //2.创建线程对象        FirstThread t2=new FirstThread();        //3.启动线程        t2.start();                for(int i=0;i<10;i++){            //调用Thread.currentThrad().getName()可获得当前线程的名字            System.out.println(Thread.currentThread().getName()+"===="+i);        }    }}
复制代码

 【注意!!!】

启动线程使用 start()方法,不是run()方法!!永远不要调用线程对象的run()方法!!!

调用start()方法,系统会把run()方法当成线程执行体来处理。

直接调用run()方法,则run()方法会立即被执行,系统会把线程对象当成一个普通对象来处理,run()方法也变成了一个普通的方法

 另外,直接调用线程对象的run()方法,则run()方法内不能通过getName()来获得当前执行线程的名字,而是需要使用Thread.currentThread先获得当前线程,再调用线程的getName()方法来获得线程的名字。

另外,调用了线程的run()方法之后,该线程已经不再处于新建状态,不要再次调用线程对象的start()方法,只能对处于新建状态的线程调用start()方法,否则会引发IllegalThreadStateException异常。

 

 

【运行结果】

 

【注意一:主线程勿忘】

 java程序开始运行时,程序至少会创建一个主线程,不要忘记了,本例中的main()方法的方法体就是主线程的线程执行体。

【注意二:两个读取线程名字的方法的区别】

1. Thread.currentThread():currentThread()是Thread类的静态方法,该方法是获取当前正在执行的线程的线程对象

2.getName():该方法是Thread类的实例方法,该方法返回调用该方法的线程的名字

【注意三:关于线程名字】

1.默认情况下,主线程的名字是main,用户启动的线程名字依次是:Thread-0、Thread-1......

2.当然,可以通过setName(String name)来设置对应的线程的名字。

0 0