Java线程的一些整理


======================================================
注:本文源代码点此下载
======================================================

这里是来自javaapi:

线程 是程序中的执行线程。java 虚拟机允许应用程序并发地运行多个执行线程。

线程的一些特性:

所有的java代码都是在某个线程中执行的,所以在任一行java代码中使用thread.currentthread()都可以得到当前运行线程。

jvm允许多个线程并发执行,虽然同一时刻只能有一个线程占用cpu,但每个线程占有的时间片非常短,所以人类的感官上多个线程是并发执行的。

当 jvm启动时,至少有一个用户线程运行,即执行某个类的main方法的线程。

线程在下列情况之一终止运行:

thread.run方法运行完毕(或者是thread包含的runnable对象的run方法执行完毕)

run方法内的代码运行时发生异常。

jvm在下列情况下终止运行:

所有非守护线程(即用户线程,非daemon线程)终止。假如有main线程和另外一个用户线程在运行,即使main线程终止了,还必须等待另外一个线程终止jvm才会终止。

调用了runtime类的exit方法(启动虚拟机的关闭序列)。

外部程序强行终止虚拟机执行(非正常退出)。

创建线程:

[list]

继承thread类,覆盖run方法

实现runnable接口,通过thread类的带runnable参数的构造函数传入到thread对象内,一种常用的方式:

thread t=new thread(new runable(){

public void run(){

//do something

}

});

[/list]

运行线程:

调用thread的start方法,调用之后,jvm启动一个新的线程,在新线程中执行该线程对象的run方法。

线程启动之后,不能再调用start方法,否则会抛出illegalthreadstateexception

线程的一些自动继承的特性:

如果未指明优先级,则被创建的线程和创建它的线程具有相同优先级。

如果未指明threadgroup,则被创建的线程和创建它的线程使用相同的threadgroup。如果指定threadgroup为null,则系统会自动将本线程加入系统级的threadgroup。所以说不存在没有threadgroup的线程。

如果未指明是否守护线程,则被创建的线程和创建它的线程具有相同的daemon属性。也就是说守护线程创建的线程如果未特别指定,则是守护线程,用户线程创建的线程如果未特别指定,则是用户线程。setdaemon只有在start()方法之前调用才有效。

守护线程和用户线程:

当最后一个用户线程终止的时候,所有守护线程将被“终止”(不是被interrupt),虚拟机退出。即使守护线程是个死循环。以下代码放入main方法里:

view code

1 //请等待足够久的时间(可能是1-2分钟),程序会自动停止。

2thread t1=new thread(){

3public void run(){

4int i=0;

5while(true){//死循环

6i++;

7system.out.println(i);

8//thread.yield();//如果想让t2有机会更快完成,需要调用yield让出cpu时间。

9}

10}

11 };

12 t1.setdaemon(true);//注释掉这句就可以看出区别了。

13 thread t2=new thread(){

14public void run(){

15int i=50000;

16while(i>0){

17i--;

18}

19system.out.println("t2 done");

20}

21 };

22 t1.start();

23 t2.start();

[/list]

线程优先级:

线程优先级范围是1-10,1最低优先级10最高优先级。

优先级越高越先被jvm从“等待运行”(waiting-to-run)的状态挑选出来运行。

jvm线程和操作系统线程的关系有2种(甚至可能是3种,依赖于平台和jvm实现):[list=1]

n-1关系,所有jvm线程都在同一个os线程中运行。

n-m关系,一个jvm线程是可以在多个os线程中运行,一个os线程可运行多个jvm线程,不管硬件是多核还是单核。

1-1关系,一个jvm线程对应一条os进程。(早期jvm的在linux上的实现版本)


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值