• 并发编程——多线程


    1.什么是线程
        进程:资源单位
        线程:执行单位
        注意:每一个进程中都会自带一个线程

    2.为什么要有线程
        开一个进程:
            申请内存空间   耗时
            将代码拷贝到申请的内存空间中   耗时
        开线程:
            不需要申请内存空间

        开线程的开销远远小于开进程的开销!!!
    3.如何使用线程

    4 子线程的两种建立方式

    # 方式1
    
    '''
    from threading import Thread
    import time
    
    
    def task(name):
        print('%s is running' % name)
        time.sleep(1)
        print('%s is over')
    
    
    t = Thread(target=task, args=('king',))
    t.start()
    print('主')
    '''
    
    
    # 方式 2
    from threading import Thread
    import time
    
    class MyThread(Thread):
        def __init__(self,name):
            super().__init__()
            self.name = name
    
        def run(self):
            print('%s is run'%self.name)
            time.sleep(3)
            print('%s is over'%self.name)
    
    t = MyThread('king')
    t.start()
    print('主')
    
    
    子线程建立方式

    5、线程之间的数据共享

    from threading import Thread
    
    x = 100
    
    def task():
        global x
        x =666
        print(x)
    
    t = Thread(target=task)
    t.start()
    print(x)
    数据共享

    6、线程互斥锁

    from threading import Thread,Lock
    
    import time
    
    mutex = Lock()
    n = 100
    def task():
        global n
        mutex.acquire()
        tmp = n
        time.sleep(0.1)
        n = tmp -1
        mutex.release()
    
    t_list = []
    for i in range(100):
        t = Thread(target=task)
        t.start()
        t_list.append(t)
    
    for t in t_list:
        t.join()
    print(n)
    
    互斥锁

    7、线程的其他属性方法

    from threading import Thread,active_count,current_thread
    import os
    import time
    
    
    def task(name):
        # print('%s is running'%name,os.getpid())
        print('%s is running'%name,current_thread().name,current_thread().getName())
        time.sleep(1)
        print('%s is over'%name)
    
    def info(name):
        print('%s is running' % name, current_thread().name, current_thread().getName())
        time.sleep(1)
        print('%s is over' % name)
    
    t = Thread(target=task,args=('关磊',))
    t1 = Thread(target=info,args=('关超',))
    t.start()
    t1.start()
    t.join()
    print(active_count())  # 当前存活的线程数
    print(os.getpid())
    print(current_thread().name)
    print(current_thread().getName())
    
    线程其他属性方法
  • 相关阅读:
    JAVA集合类汇总
    springmvc执行流程详细介绍
    java文件上传和下载
    Java中的Filter过滤器
    JSTL介绍及使用
    JSP知识汇总
    JAVA集合类汇总
    服务治理框架dubbo中zookeeper的使用
    map进程数量和reduce进程数量
    Hadoop的序列化
  • 原文地址:https://www.cnblogs.com/king-home/p/10826203.html
Copyright © 2020-2023  润新知