join Daemon 可重入锁 信号量 定时器 .事件 线程队列

本文详细探讨了Java并发编程中的关键概念,包括可重入锁的原理与应用,信号量如何控制并发访问,定时器在任务调度中的作用,以及事件和线程队列在多线程环境下的使用。通过这些知识,读者将能够更好地理解和管理并发程序的执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'''
程序    进程     cpu    多线程    生命周期  两种实现线程方式   生产消费者模型(仓储模型)
互斥锁(Lock)     线程安全  非线程安全  同步  异步

1.join Daemon
    join 挂起主线程 待当前线程结束之后 再继续执行挂起主线程 (可以指定挂起时间---timeout)
    Daemon----设置守护线程

2.可重入锁(递归锁)  RLock------锁中加锁

3.信号量 Semaphore---定量

4.定时器

5.事件---e.wait(程序挂起)
       --e.set改变状态(False)

6.线程队列
'''

'''
#Daemon--False
import threading,time
def run():
    for i in range(100):
        time.sleep(0.1)
    print("子线程结束")
t1 = threading.Thread(target = run)
t1.start()
print("主线程结束")
'''

'''
#Daemon--True
import threading,time
def run():
    for i in range(100):
        time.sleep(0.1)
    print("子线程结束")
t1 = threading.Thread(target = run)
t1.setDaemon(True)
t1.start()
print("主线程结束")
'''

'''
#Daemon--True
import threading,time
def run():
    for i in range(100):
        time.sleep(0.1)
    print("子线程结束")
t1 = threading.Thread(target = run)
t1.setDaemon(True)
t1.start()
t1.join()
print("主线程结束")
'''

'''
import threading,time
def run():
    for i in range(100):
        time.sleep(0.1)
    print("子线程结束")
t1 = threading.Thread(target = run)
t1.setDaemon(True)
t1.start()
t1.join(timeout = 5)
print("主线程结束")
'''

'''
#哲学家就餐 ---RLock
import threading,time

rlock1 = threading.RLock()
rlock2 = threading.RLock()
rlock3 = threading.RLock()
rlock4 = threading.RLock()
rlock5 = threading.RLock()

class zhexuejia():
    def __init__(self,left,right):
        self.left = left
        self.right = right

z1 = zhexuejia(rlock5,rlock1)
z2 = zhexuejia(rlock1,rlock2)
z3 = zhexuejia(rlock2,rlock3)
z4 = zhexuejia(rlock3,rlock4)
z5 = zhexuejia(rlock4,rlock5)

def run(z,name):
    f = z.left.acquire()
    if f:
        print(name,"获取左筷子")
        ff = z.right.acquire()
        if ff:
            print(name,"获取右筷子")
            print("哲学家开始就餐",name)
            time.sleep(1)
    z.right.release()
    z.left.release()

t1 = threading.Thread(target = run,args = (z1,"z1"))
t2 = threading.Thread(target = run,args = (z2,"z2"))
t3 = threading.Thread(target = run,args = (z3,"z3"))
t4 = threading.Thread(target = run,args = (z4,"z4"))
t5 = threading.Thread(target = run,args = (z5,"z5"))

t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
'''

'''
import threading,time
#s = threading.Semaphore(3)
s = threading.Lock()
def run(name):
    s.acquire()
    print(name,"开始执行")
    time.sleep(1)
    print(name,"执行结束")
    s.release()
start_time = time.time()
t1 = threading.Thread(target = run,args = ("t1",))
t2 = threading.Thread(target = run,args = ("t2",))
t3 = threading.Thread(target = run,args = ("t3",))
t4 = threading.Thread(target = run,args = ("t4",))
t5 = threading.Thread(target = run,args = ("t5",))
t6 = threading.Thread(target = run,args = ("t6",))
t7 = threading.Thread(target = run,args = ("t7",))
t8 = threading.Thread(target = run,args = ("t8",))
t9 = threading.Thread(target = run,args = ("t9",))
t10 = threading.Thread(target = run,args = ("t10",))
t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
t6.start()
t7.start()
t8.start()
t9.start()
t10.start()

t1.join()
t2.join()
t3.join()
t4.join()
t5.join()
t6.join()
t7.join()
t8.join()
t9.join()
t10.join()

end_time = time.time()
print(end_time-start_time)
'''

'''
#Timer
import threading

def deal_task(n):
    print("%s我执行"%n)
t = threading.Timer(3,deal_task,args=("10",))
t.start()
'''

'''
import threading,time

e = threading.Event()

def hld():
    print("现在是红灯")
    time.sleep((5))
    e.set()
    print("现在是绿灯")

def car_run(name):
    print(name,"迎面驶来")
    e.wait()
    print(name,"继续前行")
    
for i in range(10):
    t = threading.Thread(target = car_run,args=(i,))
    t.start()
h = threading.Thread(target=hld,)
h.start()
'''

'''
#普通队列
import queue
q = queue.Queue()
q.put('2')
q.put(1)
q.put({'a':1})

print(q.get())
print(q.get())
print(q.get())
'''

'''
#堆栈队列
import queue

q = queue.LifoQueue()
q.put(1)
q.put('2')
q.put({'a':1})

print(q.get())
print(q.get())
print(q.get())
'''

'''
import queue
q = queue.PriorityQueue()
q.put((10,'Q'))
q.put((30,'Z'))
q.put((20,'A'))

print(q.get())
print(q.get())
print(q.get())
'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值