java学习笔记83--Thread类中常用方法

注:Thread类中有一些方法已经被标注为过时,不推荐使用.
官网中还给出了弃用哪些方法的原因:
http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
    
第一类:静态方法
        public static int activeCount()
            返回当前线程的线程组中活动线程的数目
        
        public static Thread currentThread()
            返回对当前正在执行的线程对象的引用

        public static int enumerate(Thread[] tarray)
            将当前线程的线程组及其子组中的每一个活动线程复制到指定的数组中

        public static void sleep(long millis)
            让当前线程在指定的毫秒数内休眠

        public static void yield()
            暂停当前运行的线程,让给其他线程使用CPU执行

        public static boolean holdsLock(Object obj)
            判断当前线程先是否拿着指定的锁
    


第二类:非静态方法
        public void run()
            线程要执行的代码在此方法中
        public void start()
            线程启动时必须调用的方法

        public long getId()
            返回该线程的标识符,线程ID是一个正的long数,在创建该线程时生成。线程ID是唯一的,线程终止时,该线程ID可以被重新使用

        public void setName(String name)
            设置该线程的名称
        public String getName()
            返回该线程的名称
        
        public int setPriority()
            设置线程的优先级
        public int getPriority()
            返回线程的优先级

        public Thread.State getState()
            返回该线程的状态

        public ThreadGroup getThreadGroup()
            返回该线程所属的线程组

        public boolean isAlive()
            测试线程是否处于活动状态
        
        public void setDaemon(boolean on)
            将该线程标记为守护线程或用户线程,默认false表示用户线程
        public boolean isDaemon()
            测试该线程是否为守护线程
        
        public void join()
            当前线程等待某个线程执行结束
            
        public void join(long millis)
            给定一个等待的限定时间

    

第三类:容易混淆的方法
        public void interrupt()
            中断线程
        public boolean isInterrupted()
            测试线程是否已经中断
        public static boolean interrupted()
            测试当前线程是否已经中断
        
        如果线程a对象是处于阻塞状态的话,在线程b中调用a.interrupt()是会打断线程a的阻塞状态的(后抛出打断异常)
        但是如果线程a对象是处于就绪等状态,在线程b中调用a.interrupt()只是会改变对象a内部的一个boolean类型标识,用来表示线程b想打断线程a

        isInterrupted和interrupted的返回值就是这个boolean类型的值
        区别在于静态方法interrupted在返回boolean值后,会把这个打断的标示符给清理掉,而且非静态方法isInterrupted不会清理


        //观察Thread类中的部分源码
        public class Thread implements Runnable{
            public void interrupt() {
                if (this != Thread.currentThread())checkAccess();

                synchronized (blockerLock) {
                    Interruptible b = blocker;
                    //判断当前线程是否是阻塞状态
                    if (b != null) {
                        // Just to set the interrupt flag
                        interrupt0();     
                        b.interrupt(this);
                        return;
                    }
                }
                //如果不是阻塞状态就只set一下打断的flag
                interrupt0();
            }
            private native void interrupt0();

            
            public boolean isInterrupted() {
                return isInterrupted(false);
            }
            
            public static boolean interrupted() {
                return currentThread().isInterrupted(true);
            }
            private native boolean isInterrupted(boolean ClearInterrupted);
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值