关于Thread类

1. Thread类也实现了Runnable接口, 因此可以使用Thread(Runnable target)构造函数初始化实例变量.

    public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}


在Thread类中的run方法只判断target是否存在, 如果采用以上构造方法,则target存在,就调用target的run()方法. 要么就被Thread子类的run()方法覆盖.这里用到了[b]命令行模式[/b].

    public void run() {
if (target != null) {
target.run();
}
}


2. Thread在调用start()方法后, start()不会立即调用run()方法,而是将这个线程加到线程组, 线程组由JVM创建, 然后调用start0(). 这是个[b]本地方法[/b],"使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。" "native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的, java只能调用。"


public synchronized void start() {
/**
* This method is not invoked for the main method thread or "system"
* group threads created/set up by the VM. Any new functionality added
* to this method in the future may have to also be added to the VM.
*
* A zero status value corresponds to state "NEW".
*/
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
start0();
if (stopBeforeStart) {
stop0(throwableFromStop);
}
}

private native void start0();


3. 实现Rannable接口方式创建多个线程时,各个线程就可以共享实现类某个实例的实例变量,当然不同实现类实例则仍不共享;继承Thread方式创建多线程,则每个线程都有实现类的实例变量, 但实现类的静态变量仍是被各个线程共享.

补充:

当在方法中调用一些不是由java语言写的代码或者在方法中用java语言直接操纵计算机硬件时要声明为native方法。本地方法非常有用,因为它有效地扩充了jvm.事实上,我们所写的java代码已经用到了本地方法,在sun的java的并发(多线程)的机制实现中,许多与操作系统的接触点都用到了本地方法,这使得java程序能够超越java运行时的界限。有了本地方法,java程序可以做任何应用层次的任务。

java中,通过JNI(Java Native Interface,java本地接口)来实现本地化。
Native方法一般用于两种情况:

1)在方法中调用一些不是由java语言写的代码。
2)在方法中用java语言直接操纵计算机硬件。

如果使用了native方法也就丢失了java的方便性和安全性。Native方法的执行依赖于JVM的设计者,比如在sun的JVM中,可以通过JNI(Java Native Interface) API接口来实现本地化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值