`

thread-->设置后台执行类

阅读更多
package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;

public class Daemonromactory implements Runnable
{
    
    public void run()
    {
        try
        {
            while (true)
            {
                TimeUnit.MILLISECONDS.sleep(100);
                System.out.println(Thread.currentThread() + " : " + this);
            }
        }
        catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args)
        throws Exception
    {
        ExecutorService service = Executors.newCachedThreadPool(new DaemonThreadFactory());
        for (int i = 0; i < 10; i++)
        {
            service.execute(new Daemonromactory());
        }
        System.out.println("all daemons started");
        TimeUnit.MILLISECONDS.sleep(100);
    }
    
}

class DaemonThreadFactory implements ThreadFactory
{
    
    public Thread newThread(Runnable r)
    {
        Thread t = new Thread(r);
        t.setDaemon(true);
        return t;
    }
}

 例子2 :由后台线程创建的线程全部都是后台线程。后台线程的存活时间取决于调用它的前台线程,如果前台线程执行完毕,后台线程执行就结束。

package thread;

import java.util.concurrent.TimeUnit;

/** 设置后台执行线程 */
public class SimpleDaemons implements Runnable
{
    public void run()
    {
        try
        {
            while (true)
            {
                TimeUnit.MILLISECONDS.sleep(100);
                System.out.println(Thread.currentThread());
            }
        }
        catch (Exception e)
        {
            System.out.println("sleep() interrupted");
        }
    }
    
    public static void main(String[] args)
        throws Exception
    {
        for (int i = 0; i < 10; i++)
        {
            Thread daemon = new Thread(new SimpleDaemons());
            daemon.setDaemon(true);// 设置为后台启动
            daemon.start();
        }
        System.out.println("all daemons started");
        
        TimeUnit.MILLISECONDS.sleep(100);// 当主程序停止时,后台程序同时被停止,可以设置睡眠时间来测试
        
    }
    
}
分享到:
评论

相关推荐

    WPF-Thread-Demon

    通过设置DoWork事件处理程序执行后台任务,ProgressChanged处理进度更新,而RunWorkerCompleted则处理任务完成后的工作。 5. **Task(任务并行库)** .NET 4.0引入了Task Parallel Library(TPL),Task是其核心类...

    java实现后台进程

    在Java编程中,后台进程(Background Process)通常指的是在主应用程序执行时,不与用户界面直接交互,而是默默地运行在后台执行特定任务的程序部分。这些任务可能包括数据处理、定时任务、服务监控等。Java提供了...

    后台线程Thread

    在计算机编程领域,尤其是涉及到多线程操作时,线程被分为两类:前台线程和后台线程。本文将深入探讨这两种线程的区别,以及如何通过`IsBackground`属性来设置线程的类型。 首先,前台线程是应用程序的主要执行线程...

    前端开源库-try-thread-sleep

    Web Workers可以让JavaScript在后台线程中执行计算密集型任务,而不影响主线程的用户界面。Promise则可以通过异步操作来控制代码的执行顺序,从而模拟线程等待的效果。 在`try-thread-sleep-master`压缩包中,我们...

    关于Thread -----使用线程更新进度组件

    本示例 演示采用线程的方式在后台执行任务 要在Android系统中创建和启动线程,与传统的Java程序相同,首先要创建一个Thread对象,使用Thread类的start方法启动线程 启动后将会执行Runnable接口的run方法

    Ucenter home开发资料

    --{template data/blocktpl/1}--&gt;`,在模板中添加此代码,可以调用预先设置好的数据块。 - 站外 JS 调用:通过 JavaScript 脚本实现,如`&lt;script src="http://www.ccvita.com/js.php?id=1"&gt;&lt;/script&gt;`,可以获取...

    Thread -----process

    在计算机科学领域,多线程(Thread)是并发执行任务的一种技术,特别是在Java等支持多线程编程的语言中,它允许程序同时执行多个不同的任务,从而提高了系统的效率和响应速度。"Thread --- process"这个标题可能是在...

    Java多线程-Thread类的常用结构及线程优先级

    Java多线程编程是开发高并发应用的基础,其中Thread类是实现多线程的核心类。本文将详细解析Thread类的常用结构以及线程优先级。 一、Thread类的常用结构 1. 线程中的构造器 - `Thread()`:创建一个没有指定名称...

    Thread-Msg.zip_THREAD 消息_delphi_thread

    在编程领域,线程(Thread)是程序执行的最小单元,它可以并发地与程序的其他部分一起运行。在 Delphi 这样的面向对象的 Pascal 编程环境中,线程技术被广泛应用于多任务处理和异步操作,以提高程序的响应性和效率。...

    Loading Button

    -- 设置形状属性 --&gt; &lt;/shape&gt; &lt;/item&gt; &lt;item android:state_pressed="true"&gt; &lt;!-- 按下状态 --&gt; &lt;shape android:shape="rectangle"&gt; &lt;!-- 设置形状属性 --&gt; &lt;/shape&gt; &lt;/item&gt; ...

    java-Thread-study-summary.zip_java 多线程

    - 继承`Thread`类:创建一个新的类,该类继承自`Thread`,然后重写`run()`方法,`run()`方法包含线程要执行的任务。通过创建该类的实例并调用`start()`方法启动线程。 - 实现`Runnable`接口:创建一个实现`...

    VC_simple-thread-pool.rar_thread pool_vc thread_vc 线程池_vc线程_线程池

    在C++中,虽然标准库没有直接提供线程池的实现,但可以通过`std::thread`类和自定义的调度策略来模拟实现。通常,线程池会包含以下几个关键组件: 1. **任务队列**:存储待执行的任务。新任务被添加到队列中,等待...

    LINUXC线程池[文].pdf

    pthread_join(pool-&gt;threadid[i], NULL); } // 释放资源 free(pool-&gt;threadid); CThread_worker *worker = pool-&gt;queue_head; while (worker) { CThread_worker *temp = worker; worker = worker-&gt;next; ...

    InvokeRequired-NoNeed-Thread-Safe

    `BeginInvoke`是异步的,它立即返回,而操作在后台执行。两者都需要传递一个委托,该委托定义了要在UI线程上执行的方法。 3. **避免复制粘贴**:为减少重复代码,可以创建一个泛型方法或扩展方法,它接受控件和一个...

    线程后台的作用演示

    在`Thread_test`这个示例中,可能包含了如何创建和管理后台线程的代码,演示了如何将线程设置为后台线程,并展示了在多线程环境下,后台线程如何与前台线程交互。 多线程的使用可以提高程序的响应速度和并发能力,...

    PC客户端与Android服务端的Socket同步通信.docx

    Log.d(androidService.TAG, Thread.currentThread().getName() + "---&gt;" + "ServiceBroadcastReceiver onReceive"); String action = intent.getAction(); if (START_ACTION.equalsIgnoreCase(action)) { ...

    asp.net前台显示后台处理进度条

    在ASP.NET开发中,有时我们需要实现一个功能,即在后台执行耗时操作时,让前端用户能够看到处理的进度,从而提高用户体验。这种技术通常被称为后台处理进度条。本篇文章将详细讲解如何在ASP.NET中实现在前台显示后台...

    sub-thread-access-to-the-main-thread.rar_c# 子线程_sub

    后台线程(如子线程)通常用于执行计算密集型任务,以避免阻塞UI。 3. **Invoke/BeginInvoke方法**:当子线程需要修改UI元素时,必须使用控件的`Invoke`或`BeginInvoke`方法。这是因为这些方法会确保在正确的线程...

    AN0024-RT-Thread-ulog 日志组件应用笔记 - 进阶篇1

    开启异步模式需要进行特定的配置,包括设置缓冲区大小、启动后台线程等,以确保日志处理的高效性和实时性。 3.2.3 异步模式例程 示例代码展示了如何启用异步模式,并演示了在该模式下如何正确使用日志功能。 4....

Global site tag (gtag.js) - Google Analytics