㈠ java的Thread类中start是如何调用到run()的我看jdk源码里start只是调了本地方法start0,而start0中没有
就是通过native start0再调用到的啊,只不过代码你看不到。
之所以要用native方法,是因为再往下不同平台就不一样了,java以高可移植性为目标,实际上是把平台相关的内容隐藏在jvm里。
而线程的启动,运行,生命期管理,调度这些内容都是高度平台相关的,只能通过native方法来实现,无法用java层面来实现。
具体来说,start0调用通过native interface的方式传到c++实现的native库中,在windows上是jvm dll,在linux上是so。
在native库中,接受了线程对象的句柄,创建一个线程,这个线程就是依赖操作系统强相关的了,线程启动后运行一段线程体函数,在线程体中的某个位置,再透过native interface返回来调用你的run方法。
你可以去下载一些开源jdk实现的jvm库,去看看c++层面如何实现,以满足你的好奇心
㈡ java哪个框架的多线程源码值得学习
最值得学的当属Spring框架了。不过学之前还是先熟悉它里面的各种概念好一些。 如果想零碎点学的话,Apache网站上的一些java工具,比如ant之类的,可以在了解其作用的情况下看源码分析功能的实现。
㈢ 下面哪些是thread类的方法 a,start b,run c,exit d,getpriority
start(),run() 都是Thread类里的静态方法。操作方法如下:
1、创建一个JAVA工程。
㈣ java中,thread类实现了runnable接口是什么意思
其实差不多,java中不能有多继承但是可以多接口,thread和runnable功能差不多,但是一个需要继承一个需要接口;class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
public interface Runnable
都需要重写run方法;
㈤ 谁有linux下多线程库的源码啊,要确实可用的,确实可以免费下载的,谢谢!
给你一个,你看看能不能用,保证可以免费下载:http://www.verysource.com/threads-2-0-tar-gz-540.html
包含文件如下表:
* config.guess
* makefile.in
* install-sh
* mkinstalldirs
* changelog
* autogen.sh
* configure.in
* ing
* ltmain.sh
* config.sub
* readme
* config.h.in
* acinclude.m4
* acconfig.h
* install
* makefile.am
* authors
* makefile.in
* makefile.am
* pthread.3
* makefile.in
* threads.7
* semaphore.3
* cond.3
* makefile.am
* mutex.3
* aclocal.m4
* todo
* configure
* spinlock.c
* wait_queue.c
* makefile.in
* wait_queue.h
* attributes.c
* config.h
* semaphore.c
* thread_spinlock.h
* thread.c
* thread_semaphore.h
* cloning.c
* cloning.h
* shared.c
* thread_attributes.h
* thread_mutex.h
* thread_signal_num.h
* thread.h
* thread_cond.h
* thread_list.h
* makefile.am
* mutex.c
* thread_lists.h
* cond.c
* thread_lists.c
* thread_alloc.h
* shared.h
* threads.lsm
* missing
* stamp-h.in
* dining_main.c
* consumer.c
* dining.c
* makefile.in
* dining.h
* sem2.c
* philosopher.h
* client.c
* buffer.c
* makefile.am
* philosopher.c
* consume.c
* proce.c
* sem1.c
* diner.c
* ltconfig
㈥ java Thread源代码sleep函数,有一点看不懂,求解。
static void
sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
static void sleep(long millis,
int nanos)
在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
参数:
millis - 以毫秒为单位的休眠时间。
nanos - 要休眠的另外 0-999999 纳秒。
㈦ Java线程Thread.class源码中未找到线程状态切换的地方,请教各位大神,threadStatus切换源代码在哪里找
[1]新生状态(New):当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后,此时该线程处于新生(new)状态,处于新生状态的线程有自己的内存空间,但该线程并没有运行,此时线程还不是活着的(notalive)。
[2]就绪状态(Runnable):通过调用线程实例的start()方法来启动线程使线程进入就绪状态(runnable);处于就绪状态的线程已经具备了运行条件,但还没有被分配到CPU即不一定会被立即执行,此时处于线程就绪队列,等待系统为其分配CPCU,等待状态并不是执行状态;此时线程是活着的(alive)。
[3]运行状态(Running):一旦获取CPU(被JVM选中),线程就进入运行(running)状态,线程的run()方法才开始被执行;在运行状态的线程执行自己的run()方法中的操作,直到调用其他的方法而终止、或者等待某种资源而阻塞、或者完成任务而死亡;如果在给定的时间片内没有执行结束,就会被系统给换下来回到线程的等待状态;此时线程是活着的(alive)。
[4]阻塞状态(Blocked):通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞(blocked)状态;处于Blocking状态的线程仍然是活着的(alive)。
[5]死亡状态(Dead):当一个线程的run()方法运行完毕或被中断或被异常退出,该线程到达死亡(dead)状态。此时可能仍然存在一个该Thread的实例对象,当该Thread已经不可能在被作为一个可被独立执行的线程对待了,线程的独立的callstack已经被dissolved。一旦某一线程进入Dead状态,他就再也不能进入一个独立线程的生命周期了。对于一个处于Dead状态的线程调用start()方法,会出现一个运行期(runtimeexception)的异常;处于Dead状态的线程不是活着的(notalive)。
㈧ thread类有没有实现runnable
这是java中的Thread源码,你看看..必须实现!
打个比方不是很恰当:能明白就好!
java中线程他是一个体系,好比,咱都是中国人一样,国籍都是中国,线程里面Runable就是国王
它就是规则,都的遵守实现他!
Thread也不例外!