最简单的多线程并发与守护线程与join的运用

import threading
import time

def run(n):
print("talk",n)
time.sleep(3)

#run("t1")
#run("t2")
t1=threading.Thread(target=run,args=("t1",))
t2=threading.Thread(target=run,args=("t2",))
#t1.start()
#t2.start()

##类的多线程方式
class MyThread(threading.Thread):
def __init__(self,n,sleep):
super(MyThread,self).__init__()
self.n=n
self.sleep=sleep

def run(self):
print("talk me all you know",self.n)
time.sleep(self.sleep)
print("so esay %s",self.n)

#t1=MyThread("t1",2)
#t2=MyThread("t2",4)
#t1.start()

#t2.start()
#t1.join()
#t2.join() #等待t2的结果(这一步后直接计算时间得到的就是2个线程执行完所花的时间)
#print("主要程序执行完毕")

##计算所有线程花费的时间,守护线程(非守护线程一结束程序就结束),看是否是主线程,活跃的线程数量

def run(n):
    print("task",n)
    time.sleep(2)
stat_time=time.time()
loot=[] #创建一个空列表(存线程实例)
for i in range (50):
    t=threading.Thread(target=run,args=("t-%s"%i,))
    t.setDaemon(True)#把当前线程设置为守护线程
    t.start()
    loot.append(t) #为了不阻塞后面的线程启动,不在这里join,先放到一个列表里

#for t in loot:#循环线程实例列表,等待所有线程执行完毕
     #t.join() #等待一个线程全部执行完再执行其他线程(把并程改成了串行)
print("-----ddddd-----",threading.current_thread(),threading.active_count())#看是否是主线程,活跃的线程数量
print("cost:",time.time()-stat_time)

原文地址:http://blog.51cto.com/12992048/2307606

时间: 2024-10-10 23:40:46

最简单的多线程并发与守护线程与join的运用的相关文章

简单的多线程并发同步演示

#include "stdafx.h"#include <iostream>#include <Windows.h>using namespace std;HANDLE hMutex;DWORD WINAPI Fun(LPVOID lp){    while(1){        WaitForSingleObject(hMutex,INFINITE);        cout<<"fun"<<endl;//如果不用信

C# 防止同时调用=========使用读写锁三行代码简单解决多线程并发的问题

http://www.jb51.net/article/99718.htm 本文主要介绍了C#使用读写锁三行代码简单解决多线程并发写入文件时提示"文件正在由另一进程使用,因此该进程无法访问此文件"的问题.需要的朋友可以参考借鉴 在开发程序的过程中,难免少不了写入错误日志这个关键功能.实现这个功能,可以选择使用第三方日志插件,也可以选择使用数据库,还可以自己写个简单的方法把错误信息记录到日志文件. 选择最后一种方法实现的时候,若对文件操作与线程同步不熟悉,问题就有可能出现了,因为同一个文

多线程(守护线程、join方法、线程优先级、线程组)

setDaemon(boolean on): 守护线程(后台线程),若前台(显示)线程都结束了则后台线程自动结束. 使用setDaemon(boolean on)方法,必须在开启线程前将线程标记为守护线程. 示例: class setDaemon implements Runnable { public void run() { while (true) { System.out.println(Thread.currentThread().getName()+"...run"); }

Java:多线程&lt;四&gt; Lock、停止线程、守护线程、join、优先级&amp;yield

Java1.5以后,Condition将Object监视器方法(wait, notify, notifyAll)分解成截然不同的对象,以便通过这些对象与任意Lock实现组合使用为每个对像提供多个等待set(wait-set).期中,Lock替代了synchronized方法和语句的使用,Condition替代了Objetc监视器方法和使用. 当线程处于冻结状态,就有可能线程就不会结束,interrupt用于清除线程的冻结状态.当没有指定的方式让冻结状态的线程恢复到运行状态时,这是需要对冻结状态进

从头认识多线程-1.17 守护线程setDaemon()

这一章节我们来讨论一下守护线程. 1.特性 守护线程是需要等待其他用户线程结束后才结束的线程,俗称保姆线程 2.源码解析 /** * Marks this thread as either a {@linkplain #isDaemon daemon} thread * or a user thread. The Java Virtual Machine exits when the only * threads running are all daemon threads. * * <p>

JAVA并发编程——守护线程(Daemon Thread)

在Java中有两类线程:用户线程 (User Thread).守护线程 (Daemon Thread). 所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分.因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程.反过来说,只要任何非守护线程还在运行,程序就不会终止. 用户线程和守护线程两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下

多线程---其他方法 停止线程、守护线程、join方法

第三方停止线程: 原来是stop(),因为该方法有些问题,所以被interrupt()方法取代,它的用途跟机制是 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到运行状态中来,这样就可以让操作标记来结束线程. Thread类提供了interrupt()方法. 守护线程: 线程对象.setDaemon():该方法表示,前台线程(主线程) 一结束,后台线程(后台运行线程)立即结束. Join方法: 等待该线程终止.就是说在主线程运行时候,读到了该线程的开始阶段,

多线程06.thread守护线程

package chapter2; public class Demo02 { public static void main(String[] args) { Thread th1=new Thread(){ @Override public void run() { //主线程 Thread th2=new Thread(){ //守护线程 @Override public void run() { try { Thread.sleep(1_000); System.out.println(

43. 守护线程 和 join方法

1.守护线程(后台线程):            我们在使用一款软件的时候,有的软件会让我们在不知道的情况下下载一些东西,那么这个就是后台线程.            一般用于提高软件的下载量(也就是赚取一些广告费)                        setDaemon(boolean b)    设置是否为守护线程            isDaemon()          返回是否为守护线程(是true否false)注意:当程序停止运行的时候,守护线程也必须停止 下面我们来模拟