继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

线程的命名,取得,休眠以及优先级证明代码源码

摄氏du江
关注TA
已关注
手记 41
粉丝 58
获赞 1061
线程的命名,取得,休眠以及优先级证明代码源码
  • 线程的命名和取得
package cn.dujiang.demo;

// 线程操作类
class MyThread implements Runnable{//这是一个多线程的操作类
    @Override
    public void run() {
        System.out.println(Thread.currentThread());
    }
}
public class TestDemo {
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        new Thread(mt,"自定義線程對象").start();
        mt.run();//直接調用run()方法

/*未設置名字:
 *  MyThread mt = new MyThread();
 * new Thread(mt).start();
   new Thread(mt).start();
   new Thread(mt).start();
 * 如果在实例化Thread类对象的时候没有为其设置名字,那么会自动对其
 * 进行编号命名,也就是说保证线程对象的名字不重复。
 * 运行结果:
 * Thread[Thread-0,5,main]
 * Thread[Thread-1,5,main]
 * Thread[Thread-2,5,main]
 * */
//  +++++++++++++++++++++++++++++++++++++++++
/*設置名字:
* 運行結果:
* Thread[自定义线程A,5,main]
  Thread[Thread-2,5,main]
  Thread[Thread-0,5,main]
  Thread[Thread-1,5,main]
  Thread[自定义线程B,5,main]
  Thread[Thread-3,5,main]
 * */
//+++++++++++++++++++++++++++++++++++++++++++
/*  由以下代码可以看出来:原来主方法main()就是一个线程,
 * 那么所有在主方法上创建的线程,实际上都可以将其表示为子线程,
 * 这一操作在Android上使用频繁
 * MyThread mt = new MyThread();
    new Thread(mt,"自定義線程對象").start();
    mt.run();//直接調用run()方法

    输出结果:
    Thread[main,5,main]
    Thread[自定義線程對象,5,main]*/
//===========================================
/*总结:通过以上代码可以发现,线程实际上一直都存在(主方法就是一个线程)
 *可是进程在哪里呢?
 *答:每当使用java命令解释一个程序的类的时候,对于操作系统而言,
 *都相当于启动了一个新的进程,而我们的main只是这个新进程上的一
 *一个子线程而已。
 *
 *每一个JVM启动的时候,至少启动两个线程
 *1.main线程:程序的主要执行,以及启动子线程;
 *2.gc线程:负责垃圾收集
 * */

    }
}
  • 线程的休眠
package cn.dujiang.demo;

// 线程操作类
class MyThread implements Runnable{//这是一个多线程的操作类
    @Override
    public void run() {
        //整个程序的执行速度会变慢
        for (int x = 0; x < 10000; x++) {
            try {
                Thread.sleep(1000);//1000=1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+",x =" + x);
        }

    }
}
public class TestDemo {
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        //默认情况下,在休眠的时候,如果设置了多个线程对象,那么所有的线程对象,将一起进入到run()
        //(所谓的一起进入,实际上是因为先后顺序是太短了,但实际上有区别。)
        new Thread(mt,"自定義線程對象A").start();
        new Thread(mt,"自定義線程對象B").start();
        new Thread(mt,"自定義線程對象C").start();
        new Thread(mt,"自定義線程對象D").start();
        new Thread(mt,"自定義線程對象E").start();
       }
}
  • 线程的优先级:
package cn.dujiang.demo;

// 线程操作类
class MyThread implements Runnable{//这是一个多线程的操作类
    @Override
    public void run() {
        //整个程序的执行速度会变慢
        for (int x = 0; x < 20; x++) {
            try {
                Thread.sleep(2000);//1000=1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+",x =" + x);
        }

    }
}
public class TestDemo {
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        //默认情况下,在休眠的时候,如果设置了多个线程对象,那么所有的线程对象,将一起进入到run()
        //(所谓的一起进入,实际上是因为先后顺序是太短了,但实际上有区别。)
        Thread t1 = new Thread(mt,"自定義線程對象A");
        Thread t2 = new Thread(mt,"自定義線程對象B");
        Thread t3 = new Thread(mt,"自定義線程對象C");
        //有可能优先级会提高,注意是可能
        t1.setPriority(Thread.MAX_PRIORITY);
        t2.setPriority(Thread.MIN_PRIORITY);
        t3.setPriority(Thread.NORM_PRIORITY);

        t1.start();
        t2.start();
        t3.start();

    }
}
  • 主线程优先级证明
package cn.dujiang.demo;

// 线程操作类
class MyThread implements Runnable{//这是一个多线程的操作类
    @Override
    public void run() {
        //整个程序的执行速度会变慢
        for (int x = 0; x < 20; x++) {
            try {
                Thread.sleep(2000);//1000=1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+",x =" + x);
        }

    }
}
public class TestDemo {
    public static void main(String[] args) {

        //由此可知主线程的优先级
       System.out.println(Thread.currentThread().getPriority());    
    }
}
//输出优先级有10,5,1。而以上代码的输出结果是:5
//结论:主线程属于中等优先级

总结:注意休眠,你感觉上是在休眠,其实在执行上,是有细微的先后顺序的,这也是程序经常会出错的地方,一定注意。再有,优先级,一般情况下使用不上的,优先级越高,对象越有可能先执行,注意是可能!


℃江

打开App,阅读手记
7人推荐
发表评论
随时随地看视频慕课网APP