精华内容
下载资源
问答
  • 下面给出使用python中的threading模块进行多线程编程

    使用python模块threading来编写多线程程序的基本思想就是, 在threading.Thread类的基础上派生出一个子类,  将业务逻辑在该子类的run函数中实现, 创建该子类对象的线程池,并执行该子类对象的执行函数.

    下面给出使用python中的threading模块进行多线程编程的一个示例, 在源码中,我们创建了4个线程的一个线程池和一个共享计数器, 然后让每个线程抢占执行时,将该计数器增1, 然后休眠. 这里相当于给出了一个二维空间, 线程数是一维, 每个线程执行的总次数是另一维, 从下面的运行结果可以很方便地看出: 线程轮询调度的情况.

    注意这里对count的print输出需要包含在互斥锁内部,否则打印结果不对.

    源码实现:

    #!/usr/bin/env python
    #encoding: utf-8
    
    import threading
    import time
    
    #入参是线程调用次数
    class Test(threading.Thread):
        def __init__(self, num):
            threading.Thread.__init__(self)
            self._run_num = num
    
        def run(self):
            global count, mutex
            threadname = threading.currentThread().getName()
    
            for x in xrange(0, int(self._run_num)):
                mutex.acquire()
                print threadname, x, count
                count = count + 1
                mutex.release()
                time.sleep(1)
    
    if __name__ == '__main__':
        global count, mutex
        threads = []
        num = 4
        count = 1
        # 创建锁
        mutex = threading.Lock()
        # 创建线程对象
        for x in xrange(0, num):
            threads.append(Test(10))
        # 启动线程
        for t in threads:
            t.start()
        # 等待子线程结束
        for t in threads:
            t.join()
    

    运行效果图:


    展开全文
  • 如果你可以对要处理的数据进行很好的划分,而且线程之间无须通信,那么你可以使用:创建=》运行=》回收的方式编写你的多线程程序。但是如果线程之间需要访问共同的对象,则需要引入互斥锁或者信号量对资源进行互斥...

    一.思路概述

    Python线程创建
    使用threading模块的Thread类的接口如下
    class Thread( group=None, target=None, name=None, args=(), kwargs={})
     
    需要关注的参数是target和args. target 是需要子线程运行的目标函数,args是函数的参数,以tuple的形式传递。
    以下代码创建一个指向函数worker的子线程
    def worker(tid,account): 
        ... 
     
    th = threading.Thread(target=worker,args=(i,acc) ) ;
     
    启动这个线程
    th.start()
     
    等待线程返回或者回收线程资源
    threading.Thread.join(th) 
    或者th.join()
     
    如果你可以对要处理的数据进行很好的划分,而且线程之间无须通信,那么你可以使用:创建=》运行=》回收的方式编写你的多线程程序。但是如果线程之间需要访问共同的对象,则需要引入互斥锁或者信号量对资源进行互斥访问。
     
    下面讲讲如何创建互斥锁
    创建锁 
    g_mutex = threading.Lock() 
    .... 
    使用锁 
    for ... : 
            #锁定,从下一句代码到释放前互斥访问 
            g_mutex.acquire() 
            a_account.deposite(1) 
            #释放 
            g_mutex.release()

    二.业务需求

    模拟一个公交地铁IC卡缴车费的多线程程序
    假设有10个读卡器,每个读卡器收费器每次扣除用户一块钱进入总账中,每个读卡器每天一共被刷1000000次。账户原有100块。所以最后的总账应该为10000100。

    三.源码实现

    #!/usr/bin/env python
    #encoding: utf-8
    
    import time, datetime, threading
    
    #each worker thread exec 1000000 times
    def worker(tid, account):
        global g_mutex
        for i in range(1000000):
            g_mutex.acquire()
            if i%500000 == 0:
                print 'worker thread', tid, 'count', i
            account.deposite(1)
            g_mutex.release()
    
    #account operation class
    class Account:
        def __init__(self, base):
            self.m_amount = base
    
        def deposite(self, amount):
            self.m_amount += amount;
    
        def withdraw(self, amount):
            self.m_amount -= amount
    
    
    #main entry point...
    if __name__ == '__main__':
        global g_mutex
        count = 0;
        tm_start = datetime.datetime.now()
        print 'Main Thread start at:', tm_start
    
        #initialize thread pool
        thread_pool = []
        #initialize mutex
        g_mutex = threading.Lock()
        #init thread items
        acc = Account(100)
        for i in range(10):
            t = threading.Thread(target=worker, args=(i, acc));
            thread_pool.append(t)
    
        #start worker threads one by one
        for i in range(10):
            thread_pool[i].start()
    
        #reclaim all worker threads resource
        for i in range(10):
            threading.Thread.join(thread_pool[i])
    
        #statistics
        tm_stop = datetime.datetime.now()
        print 'count=', acc.m_amount
        print 'Main Thread end at:', tm_stop
        print 'time consumption ', tm_stop-tm_start
    

    四.运行效果截图

    注意在多线程环境下print输出要放到互斥锁下面操作,才不会导致导致各线程的打印信息混乱.


    参考文献

    [1].http://blog.csdn.net/liangpz521/article/details/8906861

    展开全文
  • 原文:java多线程下载文件源码下载 源代码下载地址:http://www.zuidaima.com/share/1849085342305280.htm 多线程下载源码 ========================= java实现的多线程下载, 用到了文件合并方法,该...

    原文:java多线程下载文件源码下载


    多线程下载源码
    =========================
    java实现的多线程下载,
    用到了文件合并方法,该方法兼容其他格式的文件合并.
    如果你想研究 多线程下载 或文件合并可以参考该代码.

    20140602152917199.png

    展开全文
  • C#多线程编程实例 线程与窗体交互源码,该示例演示如何在线程安全的模式下调用Windows窗体上的控件。
  • 易语言大漠多线程模板多线程结束

    千次阅读 2020-06-02 09:06:06
    为了在线程结束时保证线程安全,首先采用WaitForSingleObject自然等待结束,设置了30s的...511遇见易语言多线程大漠多线程 源码: .版本 2 .支持库 EThread .子程序 多线程_设置结束标志, , , 在多线程全部结束.

    为了在线程结束时保证线程安全,首先采用WaitForSingleObject自然等待结束,设置了30s的等待时间,当自然结束失败时,如果等待自然线程失败,没有办法的情况下,只能强制粗暴的结束线程,同时我们对象对计数器进行恢复。

    1、多线程_设置结束标志
    2、多线程_结束
    3、_内部结束
    4、WaitForSingleObject
    5、ReleaseRef

    511遇见易语言多线程大漠多线程

    源码:

    .版本 2
    .支持库 EThread
     
    .子程序 多线程_设置结束标志, , , 在多线程全部结束时,加快结束的速度
    .参数 主序号, 整数型
     
    ' 判断主序号
    .如果真 (主序号 ≤ 0 或 主序号 ≥ MaxHwnd)
        返回 ()
     
    .如果真结束
    ' 判断句柄
    .如果真 (线程信息 [主序号].线程句柄 = 0)
        返回 ()
    .如果真结束
     
    ' 主线程
    线程信息 [主序号].是否结束 = 真
    线程信息 [主序号].线程状态 = #线程状态_正在停止
    ' 副线程
    线程信息 [主序号 + MaxHwnd].是否结束 = 真
    线程信息 [主序号 + MaxHwnd].线程状态 = #线程状态_正在停止
     
    ' 大漠插件设置结束标志
    线程信息 [主序号].dm.SetExitThread (1)
    线程信息 [主序号 + MaxHwnd].dm.SetExitThread (1)
    UI_更新 (主序号, #UI_更新)
     
     
    .子程序 _内部结束, , , 这个接口是内部调用,不对外
    .参数 主序号, 整数型
    .局部变量 wait_time, 整数型
     
    日志输出 (“结束  主序号:” + 到文本 (主序号))
    多线程_设置结束标志 (主序号)
    ' 设置等待时间30秒
    wait_time = 30 × 1000
    ' 主
    .如果真 (线程信息 [主序号].线程句柄 ≠ 0)
        .如果真 (WaitForSingleObject (线程信息 [主序号].线程句柄, wait_time) ≠ 0)
            ' 如果等待自然线程失败,没有办法的情况下,只能强制粗暴的结束线程
            日志输出 (“主线程 等待线程失败,强制结束线程”)
            强制结束线程 (线程信息 [主序号].线程句柄)
     
        .如果真结束
     
        关闭线程句柄 (线程信息 [主序号].线程句柄)
     
    .如果真结束
     
    ' 副
    .如果真 (线程信息 [主序号 + MaxHwnd].线程句柄 ≠ 0)
        .如果真 (WaitForSingleObject (线程信息 [主序号 + MaxHwnd].线程句柄, wait_time) ≠ 0)
            日志输出 (“副线程 等待线程失败,强制结束线程”)
            强制结束线程 (线程信息 [主序号 + MaxHwnd].线程句柄)
     
        .如果真结束
     
        关闭线程句柄 (线程信息 [主序号].线程句柄)
     
    .如果真结束
     
    ' 对象计数恢复
    线程信息 [主序号].dm.ReleaseRef ()
    线程信息 [主序号 + MaxHwnd].dm.ReleaseRef ()
    ' 释放对象
    线程信息 [主序号].dm.释放 ()
    线程信息 [主序号 + MaxHwnd].dm.释放 ()
     
    .子程序 多线程_结束, , , 设置结束标识
    .参数 主序号
     
     
    ' 判断主序号
    .如果真 (主序号 ≤ 0 或 主序号 ≥ MaxHwnd)
        返回 ()
     
    .如果真结束
    ' 判断句柄
    .如果真 (线程信息 [主序号].线程句柄 = 0)
        返回 ()
    .如果真结束
     
    _内部结束 (主序号)
    多线程_复位 (主序号)
    多线程_复位 (主序号 + MaxHwnd)
     
    UI_更新 (主序号, #UI_删除)
    日志输出 (“线程结束成功 主序号:” + 到文本 (主序号))

    源码:易语言大漠多线程模板-10多线程结束

    
     
    展开全文
  • 《Java多线程编程核心技术》书上案例代码 基本和书上是一样的。 每一部分都是按照书上说 创建什么项目 就直接用做包最后一层的名字,全部小写,中间加下划线。java不推荐包名大小写混用。 part几就是第几章,第一章...
  • Android 多线程断点下载源码
  • Java多线程实现源码分析

    千次阅读 2014-03-20 10:31:53
    Android异步通信有2种实现,一种是Handler,另一个就是Google自带的AsyncTask.源码分析AsyncTask是怎么实现的.
  • C#多线程进度条示例源码下载

    千次阅读 2016-09-18 20:32:12
    C#使用委托和事件写的,一个多线程进度条使用的Demo。 直接上效果: 图1 示例效果图 部分代码如下: 图2 部分代码 源码下载地址:http://download.csdn.net/detail/zhzhx0318/9633119
  • 前言 多线程的应用在Android开发中是非常常见的,常用方法...今天,我将全面解析多线程中 HandlerThread的源码 由于本文涉及多线程知识和Handler源码解析,所以阅读本文前建议先看: Android开发:Handle...
  • C#多线程后台获取网页源码: public string GetWebPageResponse(string uriArg) { System.IO.Stream responseStream = System.Net.WebRequest.Create(uriArg).GetResponse().GetResponseStream();
  • 请先看文章:Android 多线程:AsyncTask最详细使用教程 目录 1. 简介 更详细了解,请看文章:Android 多线程:AsyncTask最详细使用教程 本文主要讲解其工作原理 & 源码分析 2....
  • 万字图解Java多线程

    万次阅读 多人点赞 2020-09-06 14:45:07
    但是真正有多线程的需求却不知道怎么下手,实际上还是对多线程这块知识了解不深刻,不知道多线程api的应用场景,不知道多线程的运行流程等等,本篇文章将使用实例+图解+源码的方式来解析java多线程。 文章篇幅较长,...
  • 多线程的应用在Android开发中是非常常见的,常用方法主要有:继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentService 今天,我将全面解析多线程其中一种常见用法:IntentService 目录1. 定义...
  • 这篇文章将会从源码的角度比较清晰的展现java多线程的应用,避免一团雾水吧。 begin! 一、java实现多线程两种方式 (1)继承thread public class BaseThread extends Thread{ public BaseThread(String name) {...
  • 实现多线程,都不部分的人,都只知道两种,继承Thread类和实现runnable接口。对Callable接口实现多线程很陌生,我们看通过源码学习,了解callable是怎么一回事。
  • java多线程+Socket+Swing局域网聊天软件(客户端源码) 这是客户端源码,有11MB,因为有很多小图片。 上次忘了传源码,不好意思。
  • 源码研读-netty多线程模型

    千次阅读 2013-08-12 00:10:05
    netty和mina都出自于同一个作者,所以netty和mina的多线程模型,除了一些细节方面,大体的模型基本是一样的。本文在分析源码的过程中,也会适当对这些细节做一个对比。(注:netty源码版本为netty-4.0.2.Final) 1. ...
  • 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中...
  • java多线程核心技术梳理(附源码)

    万次阅读 多人点赞 2016-04-18 15:48:42
    本文对多线程基础知识进行梳理,主要包括多线程的基本使用,对象及变量的并发访问,线程间通信,lock的使用,定时器,单例模式,以及线程状态与线程组。
  • 本项目完成的功能类似与迅雷等下载工具所实现的功能——实现多线程断点下载。 主要设计的技术有: 1、android中主线程与非主线程通信机制。 2、多线程的编程和管理。...Android-多线程断点下载详解及源码下载(二)
  • 多线程并发编程】十二 CopyOnWriteArrayList源码分析

    千次阅读 热门讨论 2020-03-02 12:16:42
    大家都知道ArrayList是线程不安全的,那如何解决ArrayList线程不安全的问题,引出CopyOnWriteArrayList,结合源码浅谈源码的那些事。
  • 首先,对于JAVA的一些基础知识,工作年限到了一定时间后,尽量不要一来就百度查询,比如thread join的作用,我们不妨先看一看join方法的源码,先试着自己理解,然后再去查询别人的理解,举一反三,美哉美哉。...
  • Linux下基于c++开发的多线程下载器 简单介绍 本项目为一款基于c++开发的linux下的http下载器,支持断点下载、多线程下载。 Githup地址 MyDownload 期待您的star&fork。 主要思想 利用http协议...
  • (一) 了解 Java 虚拟机 - JVM多线程并发 (二) 了解 Thread多线程并发 (三) 锁 synchronized、volatile多线程并发 (四) 了解原子类 AtomicXX 属性地址偏移量,CAS机制多线程并发 (五) ReentrantLock 使用和源码 ...
  • Android多线程研究(1)——线程基础及源码剖析

    千次阅读 多人点赞 2014-05-20 11:12:29
    从今天起我们来看一下Android中的多线程的知识,Android入门容易,但是要完成一个完善的产品却不容易,让我们从线程开始一步步深入Android内部。一、线程基础回顾package com.maso.test; public class ...
  • Java 多线程:彻底搞懂线程池

    万次阅读 多人点赞 2019-07-09 19:27:00
    熟悉Java多线程编程的同学都知道,当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了。 目录 1 线程池的优势 2 线程池的使用 3 线程池的工作原理 4 线程池的参数 4.1 任务队列...
  • 《探索C++多线程》:mutex源码(一)

    千次阅读 2017-04-19 14:22:34
    互斥是为了防止多线程同时访问共享资源而产生的数据竞争,并提供多线程的同步支持。
  • 多线程的两种创建方式,图解对源码进行分析
  • C++多线程支持库(Thread support library)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 401,688
精华内容 160,675
关键字:

多线程源码