MyThread类是一个线程类,代码如下
class MyThread extends Thread
{
public void run( )
{
System.out.println("hello world");
}
}
//运行这个run方法一般有三种方法
//1:使用MyThread.start()方法
//2: 使用Thread类
//3:在主线程中直接调用run方法
public class test
{
public static void main(String[] args) throws Exception
{
//第一种方法
MyThread myThread = new MyThread();
myThread.start();
//第二种方法
Thread thread = new Thread(myThread);
thread.start();
//第三种方法
myThread.run();
System.in.read();
}
}
有时需要禁止在主线程中直接调用run或是使用Thread方式调用run。从果要达到这个目标,可以将MyThread的run方法改写为如下形式
class MyThread extends Thread
{
public void run( )
{
if (Thread.currentThread() != this)
throw new IllegalStateException("线程调用错误(只能本线程类调用run方法)");
System.out.println("hello world");
}
}
其中Thread.currentThread()方法返回当前正在执行的线程,而在run方法中调用currentThread,表示正是由当前正在执行的线程类调用的run方法。如果当前正执行的线程类和当前的MyThread对象this不相等的话,就说明是其它的线程事例来调用的run方法。因此,抛出一个错误。
可在run方法中加下System.out.println(Thread.currentThread().getName());获得当前正在执行的线程名。
class MyThread extends Thread
{
public void run( )
{
System.out.println("hello world");
}
}
//运行这个run方法一般有三种方法
//1:使用MyThread.start()方法
//2: 使用Thread类
//3:在主线程中直接调用run方法
public class test
{
public static void main(String[] args) throws Exception
{
//第一种方法
MyThread myThread = new MyThread();
myThread.start();
//第二种方法
Thread thread = new Thread(myThread);
thread.start();
//第三种方法
myThread.run();
System.in.read();
}
}
有时需要禁止在主线程中直接调用run或是使用Thread方式调用run。从果要达到这个目标,可以将MyThread的run方法改写为如下形式
class MyThread extends Thread
{
public void run( )
{
if (Thread.currentThread() != this)
throw new IllegalStateException("线程调用错误(只能本线程类调用run方法)");
System.out.println("hello world");
}
}
其中Thread.currentThread()方法返回当前正在执行的线程,而在run方法中调用currentThread,表示正是由当前正在执行的线程类调用的run方法。如果当前正执行的线程类和当前的MyThread对象this不相等的话,就说明是其它的线程事例来调用的run方法。因此,抛出一个错误。
可在run方法中加下System.out.println(Thread.currentThread().getName());获得当前正在执行的线程名。