文档章节

java Thread类

 程序羊
发布于 2017/05/24 17:19
字数 755
阅读 42
收藏 0

是程序中执行的一个线程,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类的方法。这个方法会使当前线程把自己放进这个对象的等待集中,并释放这个对象的锁和同步

 

 

© 著作权归作者所有

粉丝 4
博文 58
码字总数 19536
作品 0
朝阳
程序员
私信 提问

暂无文章

一个简单易用的Linux文本编辑器:nano的安装与使用

许多状况下咱们都必要编纂云主机里的文本情节,而现时用的比力多的文本编纂器是vim,这个估量许多人都以为很难用,这边伏笔VPS引荐一个简略易用的文本编纂器nano,比vim简略许多,很轻易上手...

shzwork
23分钟前
2
0
go recover

异常、错误常见语言处理 一般语言都有其错误处理方式,就以鄙人熟悉的php来距离吧。 PHP有多个级别的错误处理方式,以防止程序在还未正确执行完毕时,就造成了程序的提前结束。 try/catch/fi...

o0无忧亦无怖
41分钟前
1
0
玩转混合云+边缘计算,且看ZStack Mini!

文章导读:2019年4月16日,ZStack新品和合作伙伴战略发布会上,面向集团客户和边缘场景需求,ZStack重磅推出ZStack Mini超融合一体机(以下简称:ZStack Mini)和ZStack多云管理平台(以下简...

ZStack社区版
43分钟前
1
0
springboot 整合redis

springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> ...

jason_kiss
47分钟前
2
0
手机耗电问题,大部分是没有正确使用这个“锁”

当安卓设备闲置时,设备很快会进入休眠状态,以达到省电和减少CPU占用的目的。但有些应用在手机灭屏甚至系统休眠时,依然频繁占用CPU处理事件或唤醒屏幕提示用户消息,这类行为会导致手机耗电...

安卓绿色联盟
48分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部