多线程的非主线程的销毁机制

假设有如下代码所示的多线程:

 1 private void btnNewThread_Click(object sender, EventArgs e)
 2 {
 3     Thread t = new Thread(new ThreadStart(Test));
 4     t.Start();
 5     this.btnNewThread.Enabled = false;
 6 }
 7 private void Test()
 8 {
 9      //……
10 }

这个新建的线程t在执行完Test()方法后会自动销毁吗?还是需要写代码手动销毁呢?

下面就多线程的非主线程销毁机制做个总结:

1).t结束就自动销毁了

2).设置线程属性IsBackground=true

   将线程t作为后台线程,随着主线程结束而一起结束,不管这个线程有没有执行完。

3).手动销毁

可以在创建线程的时候加个线程名,然后存放到线程池里,在要销毁的时候从线程池找到对应线程销毁。

时间: 2024-12-17 07:00:37

多线程的非主线程的销毁机制的相关文章

在非主线程里面使用NSTimer创建和取消定时任务

为什么要在非主线程创建NSTimer 将 timer 添加到主线程的Runloop里面本身会增加线程负荷 如果主线程因为某些原因阻塞卡顿了,timer 定时任务触发的时间精度肯定也会受到影响 有些定时任务不是UI相关的,本来就没必要在主线程执行,给主线程增加不必要的负担.当然也可以在定时任务执行时,手动将任务指派到非主线程上,但这也是有额外开销的. NSTimer的重要特性 NSTimer上的定时任务是在创建NSTimer的线程上执行的.NSTimer的销毁和创建必须在同一个线程上操作 NSTi

Android 在非主线程无法操作UI意识

Android在应用显示Dialog是一个非常easy事儿,但我从来没有尝试过Service里面展示Dialog. 经验UI操作要在主线程,本地的服务Service是主线程里没错,可是远程service里面显示Dialog,听起来是不是就应该没有在主线程里面了呢? 尝试一下就知道了,写了个AIDL的调用,client端去调用AIDL.在Service这边就是去显示一个Dialog. AIDL的部分就忽略了.Service这边的代码就和Activity上显示dialog一样. AlertDialo

Android 关于非主线程不能操作UI的认识

Android在应用里显示Dialog是个很简单的事情,但是一直没试过在Service里面显示Dialog.根据之前的经验UI操作要在主线程,本地的服务Service是主线程里没错,但是远程service里面显示Dialog,听起来是不是就应该没有在主线程里面了呢? 尝试一下就知道了,写了个AIDL的调用,client端去调用AIDL,在Service这边就是去显示一个Dialog.AIDL的部分就忽略了.Service这边的代码就和Activity上显示dialog一样. AlertDialo

SD_WebImage-03-多线程+下载任务放入非主线程执行

1 // 2 // UIImageView+WebCache.m 3 // 02-SDWebImage 4 // 5 // Created by mac on 16/4/20. 6 // Copyright © 2016年 mac. All rights reserved. 7 // 8 9 #import "UIImageView+WebCache.h" 10 11 @implementation UIImageView (WebCache) 12 13 /** 14 * 注意点:有

非主线程创建窗口也能工作正常,只要我们注意一点:消息循环必须要和创建窗口在同一线程!

#include "stdafx.h" #include "win32.h" #include "windows.h" #include #define MAX_LOADSTRING 100 HWND g_hWnd = NULL; HINSTANCE g_hInst; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void CreateWnd(void) { WNDCLASS wc =

Java多线程协作CountDownLatch,主线程等待子线程结束

CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count);构造方法参数指定了计数的次数 public void countDown(); countDown方法,当前线程调用此方法,则计数减一 public void await() awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0 ===============================

Android 在工作线程(非主线程)更改UI组件

Looper.prepare();          Toast.makeText(LoginActivity.this,filedId, Toast.LENGTH_LONG).show();        Looper.loop(); 这样为什么可以?然后就是loop 是个死循环,这样子真的好吗?

线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading

入门-------------------------------------------------------------------------------- 概述与概念    一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建. 创建和开始使用多线程    public Window1()    {        //主线程         //Code……        //使用匿名方法来启动子线程        Thread t = new Th

解决iOS程序UI主线程和定时器相互阻塞的问题

我的问题是这样,我的页面上有一个UIScrollView和一个定时器用来记录当前考试模式下的剩余时间,问题出现了:当我滑动滚动试图时,定时器的方法便不在运行(即被UI主线程阻塞).google一下找到了解决办法:将定时器放在非主线程中执行将更新UI的操作放到主线程,这样UI主线程和定时器就能互不干扰的相互工作了. 在另一个项目中,还解决了一个问题:手机验证码,获取按钮,点击获取后,会开始倒计时一段时间,按钮不可点,按钮上的文字不断变化. 获取验证码 120秒后重新获取 119秒后重新获取 以下是