首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Thread和Runnable的API(2)

Thread和Runnable的API(2)

Thread类详解:

    JAVA中多线程的核心是Thread,Thread翻译为线程,线程有以下几种状态,接下来我会按照Thread类中的方法来逐一讲解。
    复制代码

1.Thread t = new Thread()仅仅只是创建了线程,并没有为线程分配任何资源
2.start()方法用来启动线程,为相应地线程分配资源,分配到资源才能参与到竞争CPU的过程中 run():当start()启动一个线程后,线程一直等待直到获得了CPU执行时间,就进入run方法体

3.sleep()让线程休眠,主动让出CPU,但是不会释放锁,休眠时间满后,不一定立即得到执行,还需要重新参与竞争排队

    public class ThreadSleep {
     
        private int i = 0;
        public Object lock = new Object();
     
        public static void main(String[] args) {
            ThreadSleep mh = new ThreadSleep();
            ThreadTest tt = mh.new ThreadTest();
            ThreadTest tt2 = mh.new ThreadTest();
            tt.start();
            tt2.start();
        }
     
        class ThreadTest extends Thread {
            @Override
            public void run() {
                //使用的锁为Object lock = new Object(); 而不是方法所在的类的内置monitor
                synchronized (lock) {
                    i++;
                    System.out.println("i:" + i);
                    try {
                        System.out.println("线程i:" + Thread.currentThread().getId() + "睡眠开始");
                        long startTime = System.currentTimeMillis();
                        Thread.currentThread().sleep(1000);
                        long endTime = System.currentTimeMillis();
                        System.out.println("线程i:" + Thread.currentThread().getId() + "睡眠时间:" + (endTime - startTime));
                    } catch (Exception e) {
                    } finally {
                        System.out.println("线程i:" + Thread.currentThread().getId() + "睡眠结束");
                    }
                    i++;
                    System.out.println("i:" + i);
                }
            }
        }
    }
    复制代码

输出:

    i:1
    线程i:9睡眠开始
    线程i:9睡眠时间:1005
    线程i:9睡眠结束
    i:2
    i:3
    线程i:10睡眠开始
    线程i:10睡眠时间:1004
    线程i:10睡眠结束
    i:4
    复制代码
返回列表