多线程

IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

寵の児 提交于 2020-03-28 04:03:41
进程 :正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间; 线程 :线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程。 队列 : dispatch_queue_t,一种先进先出的数据结构, 线程的创建和回收不需要程序员操作,由队列负责。    串行队列 :队列中的任务只会顺序执行(类似跑步)        dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial);    并行队列 :队列中的任务通常会并发执行(类似赛跑)       dispatch_queue_t q = dispatch_queue_create("......", dispatch_queue_concurrent);    全局队列 :是 系统开发 的,直接拿过来(get)用就可以;与并行队列类似,但调试时,无法确认操作所在队列       dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);    主队列 :每一个应用程序对应唯一一个主队列,直接get即可;在多线程开发中,使用主队列更新UI        dispatch_queue

java多线程总结三:sleep()、join()、interrupt()示例

佐手、 提交于 2020-03-28 03:44:11
这是一个来自《java编程思想上的示例》 [java] view plain copy package demo.thread; /** *sleep()是静态方法,是属于类的,作用是让当前线程阻塞 *join()是使线程同步,如在某个线程里调用t.join()表示t线程执行完再执行当前线程 *interrupt()给线程设定一个标志表示该线程已被中断,但在异常捕获时将清理这个标志 *所以在catch子句中,该标志为false */ public class SleepJoinDemo { public static void main(String[] args) { Sleeper sleep1 = new Sleeper( "sleep1", 1500); Sleeper sleep2 = new Sleeper( "sleep2", 1500); Joiner join1 = new Joiner( "join1", sleep1); Joiner join2 = new Joiner( "join2", sleep1); sleep2.interrupt(); } } class Sleeper extends Thread { // 可以传参设定睡眠时间 private int sleepTime; public Sleeper(String name, int

java多线程解读一(基础篇)

允我心安 提交于 2020-03-27 17:32:42
一、线程的定义 每个应用程序内部都是由一个或多个的进程组成,而每个进程内部都是由许多具体的线程执行,所以,线程是每个程序执行的最小单位。 二、线程的实现 1.通过继承java.lang.Thread类、重写类中的run方法 class PrimeThread extends Thread {   long minPrime;   PrimeThread(long minPrime) {     this.minPrime = minPrime;   }   public void run() {      // compute primes larger than minPrime . . .   } } 然后通过创建线程对象,使线程就绪 PrimeThread p = new PrimeThread(143); p.start(); 2.通过实现java.lang.Runnable接口,实现类中的run方法 class PrimeRun implements Runnable {   long minPrime;   PrimeRun(long minPrime) {     this.minPrime = minPrime;   }   public void run() {     // compute primes larger than minPrime . . .   

多线程之wait,notify,volatile,synchronized,sleep

浪尽此生 提交于 2020-03-27 17:32:08
  最近在学习多线程,现在进行总结一下吧。首先要了解一下以下几个名词。   (1)wait:当线程调用wait()方法时,当前该线程会进入阻塞状态,且 释放锁 ,使用wait方法的时候, 必须配合synchronized使用 。   (2)notify:当线程调用notify()方法时,会唤醒一个处于等待该对象锁的线程, 不释放锁 ,使用notify方法的时候, 必须配合synchronized使用 。   (3)sleep:当线程调用sleep()方法时,会让出CPU执行权, 不释放锁 。当指定的时间到了后,会自动恢复运行状态。   (4)volatile:可见性,它修饰的成员变量在每次被线程访问时,都强迫从内存中重读该成员变量的值;而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存,这样在任何时刻两个不同线程总是看到某一成员变量的同一个值,这就是保证了可见性。( 当多个线程操作同一个成员变量的时候,为了提高效率,JVM为每个线程单独复制了一份 ,这样会导致各个线程读取的数据出现脏数据,所以使用volatile关键字可以解决脏数据问题)。   (5)synchronized:synchronized为一段操作或内存进行加锁,它具有互斥性。当线程要操作被synchronized修饰的内存或操作时, 必须首先获得锁才能进行后续操作

浅解多线程

时光毁灭记忆、已成空白 提交于 2020-03-27 10:17:15
1、进程和线程的区别:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 2、 新手学习多线程的详细思路和流程 :http://www.cnblogs.com/xiaoguangit/p/4991825.html 3、 我是一个线程 :http://kb.cnblogs.com/page/542462/ 4、 多线程编程基础知识 :http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 5、 浅解多线程 :http://www.cnblogs.com/knowledgesea/archive/2012/11/22/2780651.html 6、进程与线程的一个简单解释:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 来源: https://www.cnblogs.com/JLZT1223/p/6139840.html

Python多线程的简单实现(生产者消费者模型)

六眼飞鱼酱① 提交于 2020-03-27 03:09:15
1 __author__ = "JentZhang" 2 3 import time, threading, queue 4 5 q = queue.Queue(maxsize=10) # 声明队列 6 7 8 def Producer(name): 9 '''生产者''' 10 count = 1 11 while True: 12 q.put(count) # 往队列中添加数据 13 print("[%s] 生产了第%s包子\n" % (name, count)) 14 count += 1 15 time.sleep(3) 16 17 18 def Consumer(name): 19 '''消费者''' 20 while True: 21 i = q.get() # 从队列中取数据 22 print("====[%s] 吃了第%s个包子\n" % (name, i)) 23 time.sleep(1) 24 25 26 '''设置多线程''' 27 p = threading.Thread(target=Producer, args=("Jent",)) 28 c1 = threading.Thread(target=Consumer, args=("张三",)) 29 c2 = threading.Thread(target=Consumer, args=("李四",))

Java Map

拥有回忆 提交于 2020-03-26 18:55:30
Map无论在Java编程或者面试中,都占用很重要的地位,这里试图聊聊相关的概念,看看是否能够理清楚相关的思路。 HashMap HashMap 是我们经常会用到的集合类,JDK 1.7 之前底层使用了数组加链表的组合结构,如下图所示: 新添加的元素通过取模的方式,定位 Table 数组位置,然后将元素加入链表头部,这样下次提取时就可以快速被访问到。 访问数据时,也是通过取模的方式,定位数组中的位置,然后再遍历链表,依次比较,获取相应的元素。 如果 HasMap 中元素过多时,可能导致某个位置上链表很长。原本 O(1) 查找性能,可能就退化成 O(N) ,严重降低查找效率。 为了避免这种情况,当 HasMap 元素数量满足以下条件时,将会自动扩容,重新分配元素。 1// size:HashMap 中实际元素数量 2//capacity:HashMap 容量,即 Table 数组长度,默认为:16 3//loadFactor:负载因子,默认为:0.75 4 size>=capacity*loadFactor HasMap 将会把容量扩充为原来的两倍,然后将原数组元素迁移至新数组。 1void transfer(Entry[] newTable, boolean rehash) { 2 int newCapacity = newTable.length; 3 for (Entry<K,V

Python之多线程爬虫抓取网页图片的示例代码

别说谁变了你拦得住时间么 提交于 2020-03-26 11:14:01
本篇文章主要介绍了Python之多线程爬虫抓取网页图片的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 目标 嗯,我们知道搜索或浏览网站时会有很多精美、漂亮的图片。 我们下载的时候,得鼠标一个个下载,而且还翻页。 那么,有没有一种方法,可以使用非人工方式自动识别并下载图片。美美哒。 那么请使用python语言,构建一个抓取和下载网页图片的爬虫。 当然为了提高效率,我们同时采用多线程并行方式。 思路分析 Python有很多的第三方库,可以帮助我们实现各种各样的功能。问题在于,我们弄清楚我们需要什么: 1)http请求库,根据网站地址可以获取网页源代码。甚至可以下载图片写入磁盘。 2)解析网页源代码,识别图片连接地址。比如正则表达式,或者简易的第三方库。 3)支持构建多线程或线程池。 4)如果可能,需要伪造成浏览器,或绕过网站校验。(嗯,网站有可能会防着爬虫 😉) 5)如果可能,也需要自动创建目录,随机数、日期时间等相关内容。 如此,我们开始搞事情。O(∩_∩)O~ 环境配置 操作系统:windows 或 linux 皆可 Python版本:Python3.6 ( not Python 2.x 哦) 第三方库 urllib.request threading 或者 concurrent.futures 多线程或线程池(python3.2+) re

iOS开发多线程篇—创建线程

三世轮回 提交于 2020-03-26 09:48:56
iOS开发多线程篇—创建线程 一、创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建、启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThread; // 是否为主线程 + (BOOL)isMainThread; // 是否为主线程 其他用法 获得当前线程 NSThread *current = [NSThread currentThread]; 线程的调度优先级:调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高 + (double)threadPriority; + (BOOL)setThreadPriority:(double)p; 设置线程的名字 - (void)setName:(NSString *)n; - (NSString *)name; 其他创建线程的方式 (2)创建线程后自动启动线程 [NSThread detachNewThreadSelector: