您的位置:首页 > 编程语言 > Java开发

在java中如何防止从其它线程类运行run方法

2006-09-03 12:34 549 查看
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());获得当前正在执行的线程名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: