55java Java多线程实现(Thread类实现多线程)

62 阅读2分钟

Java多线程实现(Thread类实现多线程)

 

1 Java.lang.Thread 介绍

Java.lang.Thread是一个线程操作的核心类。

如果现在要想定义一个线程的主类,那么最简单的方式就是直接继承Thread,而后覆写该类中的run()方法(相当于线程的主方法)。

 

范例:定义线程主题类

Class MyThread extends Thread { // 是一个线程的主体类

Private String title ;

Public MyThread(string title) {

This.title+title ;

}

@Override

Public void run () {  //所有的线程从此处开始执行

For (int x=0;x<10;x++)  {

System.out.println(this.title + ”,x = ”+ x) ;

}

}

}

Public static void main(String[ ] args) {

MyThread mt1 = new MyThread(“线程A”) ;

MyThread mt2 = new MyThread(“线程B”) ;

MyThread mt3 = new MyThread(“线程C”) ;

mt1.run() ;

mt2.run() ;

mt2.run() ;

}

}

 

当现在有了线程的主体类之后,很明显首先就一定会想到产生对象随后调用方法,但是现在不能够直接调用run()方法。

 

范例:观察直接调用run()方法

Public class TestDemo {

Public static void main(String[ ] args) {

MyThread mt1 = new MyThread(“线程A”) ;

MyThread mt2 = new MyThread(“线程B”) ;

MyThread mt3 = new MyThread(“线程C”) ;

mt1.run() ;

mt2.run() ;

mt2.run() ;

}

}

 

这个时候只是做了一个顺序打印,跟多线程没有关系。多线程的执行实际上和进程是相似的,也应该采用的是多个程序交替执行,而不是说各自执行各自的。

 

正确启动多线程的方式应该调用的是Thread类start()方法。

  • 启动多线程:public void start(),调用此方法会调用run();

范例:正确的启动多线程

Public class TestDemo {

Public static void main(String[ ] args) {

MyThread mt1 = new MyThread(“线程A”) ;

MyThread mt2 = new MyThread(“线程B”) ;

MyThread mt3 = new MyThread(“线程C”) ;

mt1.start( ) ;

mt2.start( ) ;

mt2.start( ) ;

}

}

此时执行代码发现所有的线程对象变为了交替执行。

 

疑问:为什么要通过start()方法来调用run()方法?而不是run()直接执行?

 

如果想解决此类问题,就必须打开Java的源代码进行浏览(在JDK的安装目录下;

源代码

Public synchronized void start(){

If(threadstatus !=0)

Throw new IllegalThreadStateException();

Group.add(this);

Boolean started = false;

Try {

   Start0();

Started = true;

} finally {

Try {

If (!started) {

 Group.threadstartFailed(this);

}

}catch (Throwable ignore) {

}

 

首先在本程序中发现该方法会抛出一个异常

“IllegalThreadStateException”,如果按照原本的处理方式,这个时候在star()方法上应该使用throws声明,或者直接在方法中进行try…catch处理,而此处不需要处理,所以它是一个RuntimeException的子类。

这个异常的产生只是在你重复启动了多线程才会抛出。所以每一个线程对象只能启动一次。

而后可以发现在start()方法里面调用了一次start0()方法,而这个方法是一个只声明而未实现的方法,同时使用了native关键字进行定义,native指的是调用本机的原生系统函数