码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程基础(一)

时间:2015-06-01 00:35:04      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

  一个简单的多线程的例子:

package multiThread;

public class BasicThread implements Runnable{
    
    private int countDown  = 10;
    private static int taskCount = 0;
    private final int id = taskCount++;
    
    public static void main(String [ ] args) {
        Thread t = new Thread(new BasicThread());
        t.setName("test_thread1");
        t.start();   //not t.run();  t.run() will not start a new thread,just exist one thread
        System.out.println("i am finished!");
    }

    @Override
    public void run() {
        while(countDown>=0){            
            System.out.print("#"+ id + "(" + (countDown>0 ? countDown : "lift off!") + "),");    
            countDown --;
        }        
    }    
}

  运行的结果为:

i am finished!
#0(10),#0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(lift off!),

  关于上面的代码有几点说明一下:

  1.final int id = taskCount++,final修饰基本变量时,值是不变的,从结果可以看到,id的值始终为0。

  2.使用t.start()来开启一个线程,而不是t.run(),t.run()还是运行在main方法的线程中,始终只有1个线程。

  3.使用t.setName("test_thread1");是一个好的习惯,方便后续的定位问题。

 

  使用setDaemon(true)可以将线程设置为后台线程,后台线程有如下的特点:

  1.JVM中只剩下Daemon线程时就会退出,只要还有一个non-Daemon线程存活,JVM就不会退出。Daemon线程可以在做一些后台的服务性工作,例如JVM的gc线程就是一个低优先级的Daemon线程。

  2.线程启动时,默认是non-Daemon的。

  3.setDaemon(true)一定要在start方法之前,否则回报异常。

  4.无法将一个已经启动的non-Daemon线程变为Daemon线程。

  5.Daemon线程中产生的新线程默认将是Daemon的。

 

  

Java多线程基础(一)

标签:

原文地址:http://www.cnblogs.com/lnlvinso/p/4542887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!