当前位置:  技术问答>java相关

高分提问易懂正确就给分

    来源: 互联网  发布时间:2015-03-28

    本文导语:  今天看Thinking in JAVA时对Daemon线程有些看不明白,各位大侠能不能非讲一讲Daemon线程的作用、优点并举一个例子,或者有什么参考资料发给我也行,分数不是问题,但一定要正确,说的明白 | ...

今天看Thinking in JAVA时对Daemon线程有些看不明白,各位大侠能不能非讲一讲Daemon线程的作用、优点并举一个例子,或者有什么参考资料发给我也行,分数不是问题,但一定要正确,说的明白

|
Daemon线程即服务线程,是为其它线程服务的线程,如果程序中只有服务线程,那程序就会停止运行,因为程序中只有服务线程是毫无意义的!比如记时器就是很好的服务线程,如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class TimerTest
{  public static void main(String[] args)
   {  JFrame f = new TimerTestFrame();
      f.show();
   }
}

class TimerTestFrame extends JFrame
{  public TimerTestFrame()
   {  setSize(450, 300);
      setTitle("TimerTest");

      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      Container c = getContentPane();
      c.setLayout(new GridLayout(2, 3));
      c.add(new ClockCanvas("San Jose", "GMT-8"));
      c.add(new ClockCanvas("Taipei", "GMT+8"));
      c.add(new ClockCanvas("Berlin", "GMT+1"));
      c.add(new ClockCanvas("New York", "GMT-5"));
      c.add(new ClockCanvas("Cairo", "GMT+2"));
      c.add(new ClockCanvas("Bombay", "GMT+5"));
   }
}

interface TimerListener
{  void timeElapsed(Timer t);
}

class Timer extends Thread
{  public Timer(int i, TimerListener t)
   {  target  = t;
      interval = i;
      setDaemon(true);
   }

   public void run()
   {  try
      {  while (!interrupted())
         {  sleep(interval);
            target.timeElapsed(this);
         }
      }
      catch(InterruptedException e) {}
   }

   private TimerListener target;
   private int interval;
}

class ClockCanvas extends JPanel
   implements TimerListener
{  public ClockCanvas(String c, String tz)
   {  city = c;
      calendar = new GregorianCalendar(TimeZone.getTimeZone(tz));
      Timer t = new Timer(1000, this);
      t.start();
      setSize(125, 125);
   }

   public void paintComponent(Graphics g)
   {  super.paintComponent(g);
      g.drawOval(0, 0, 100, 100);
      double hourAngle = 2 * Math.PI
         * (seconds - 3 * 60 * 60) / (12 * 60 * 60);
      double minuteAngle = 2 * Math.PI
         * (seconds - 15 * 60) / (60 * 60);
      double secondAngle = 2 * Math.PI
         * (seconds - 15) / 60;
      g.drawLine(50, 50, 50 + (int)(30
         * Math.cos(hourAngle)),
         50 + (int)(30 * Math.sin(hourAngle)));
      g.drawLine(50, 50, 50 + (int)(40
         * Math.cos(minuteAngle)),
         50 + (int)(40 * Math.sin(minuteAngle)));
      g.drawLine(50, 50, 50 + (int)(45
         * Math.cos(secondAngle)),
         50 + (int)(45 * Math.sin(secondAngle)));
      g.drawString(city, 0, 115);
   }

   public void timeElapsed(Timer t)
   {  calendar.setTime(new Date());
      seconds = calendar.get(Calendar.HOUR) * 60 * 60
         + calendar.get(Calendar.MINUTE) * 60
         + calendar.get(Calendar.SECOND);
      repaint();
   }

   private int seconds = 0;
   private String city;
   private int offset;
   private GregorianCalendar calendar;

   private final int LOCAL = 16;
}

|
14.1.5 Daemon线程
“Daemon”线程的作用是在程序的运行期间于后台提供一种“常规”服务,但它并不属于程序的一个基本部分。因此,一旦所有非Daemon线程完成,程序也会中止运行。相反,假若有任何非Daemon线程仍在运行(比如还有一个正在运行main()的线程),则程序的运行不会中止。
通过调用isDaemon(),可调查一个线程是不是一个Daemon,而且能用setDaemon()打开或者关闭一个线程的Daemon状态。如果是一个Daemon线程,那么它创建的任何线程也会自动具备Daemon属性。
下面这个例子演示了Daemon线程的用法:

//: Daemons.java
// Daemonic behavior
import java.io.*;

class Daemon extends Thread {
  private static final int SIZE = 10;
  private Thread[] t = new Thread[SIZE];
  public Daemon() { 
    setDaemon(true);
    start();
  }
  public void run() {
    for(int i = 0; i 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • java相关 iis7站长之家
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3