java thread类_java Thread类

是程序中执行的一个线程,java虚拟机允许应用程序中多个线程同时执行。

每个线程都有一个优先级,高优先级的线程比低优先级的线程优先执行,每个线程都可能也可能不会被标记为守护进程。当正在运行的代码创建了一个新的Thread对象的时候,这个新的Thread的初始优先级等于创建它的线程的优先级。当创建它的线程是守护线程的时候,那么它也是守护线程。

当java虚拟机启动时,通常有一个非守护线程(main方法),java虚拟机继续执行线程直到以下任何一种情况发生:

1.Runtime类的exit方法被调用,并且是安全的

2.所有的非守护线程都死亡了,从被调用的run方法返回或者fun方法抛出异常

创建一个新的可执行的线程有两种方法,

第一种方法,创建一个类继承Thread并重写Thread的run方法。例如

class PrimeThread extends Thread {

long minPrime;

PrimeThread(long minPrime) {

this.minPrime = minPrime;

}

public void run() {

// compute primes larger than minPrime

 . . .

}

}

下面的代码可以创建一个线程并启动

PrimeThread p = new PrimeThread(143);

p.start();

第二种方法,创建一个类,实现Runable接口并实现Run方法

class PrimeRun implements Runnable {

long minPrime;

PrimeRun(long minPrime) {

this.minPrime = minPrime;

}

public void run() {

// compute primes larger than minPrime

 . . .

}

}

下面的代码可以创建一个线程并启动

PrimeRun p = new PrimeRun(143);

new Thread(p).start();

每个线程都有一个名称,多个线程名字也可能相同, 如果在创建线程时未指定名称,则会为其生成一个新名称

注意:两种创建线程的方法,启动的时候代码不一样!

看类中的几个方法

yield

public static native void yield();

当前线程愿意让出CPU的提示(给调度器),但是调度器可以忽略这个提示。这个方法很少用,只是在debug或者测试中可能有用,可以复现bug

sleep

public static native void sleep(long millis) throws InterruptedException;

使当前正在执行的线程停留(暂停执行)指定的毫秒数,这取决于系统定时器和调度程序的精度和准确性

yield和sleep都不释放锁,yield是退让(退让只是退让同优先级的,低优先级的还是不能执行),还醒着呢,所以随时可以再次运行,sleep是睡觉,让低优先级的线程有了执行的机会

再看wait方法,它是Object对象的方法,并不是Thread类的方法

public final native void wait(long timeout) throws InterruptedException;

使当前线程等待,直到另一个线程调用notify()或者notifyAll()方法,或者指定的时间已过。notify和notifyAll都是Object类的方法。这个方法会使当前线程把自己放进这个对象的等待集中,并释放这个对象的锁和同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值