多线程

Java多线程系列--“JUC原子类”02之 AtomicLong原子类

耗尽温柔 提交于 2020-03-09 05:38:33
什么是线程安全? 当多个线程访问某个类时,不管这些的线程的执行顺序如何,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 哈哈书上的解释,还是翻译过来的,看了半天还是觉得有点奇怪。比如说 “类都能表现出正确的行为” 是毛线意思?在网上搜了一番 "线程安全就是说多线程访问同一代码,不会产生不确定的结果" 这样反而跟容易理解,果然读书要么读原版中文书要么读原版英文书,看英文的翻译版真的是蛋疼无比。说到这里,我以前貌似把多线程及线程安全一个根本性问题搞混淆了: 所谓的多线程是指多个线程跑同一段代码,所以线程安全的概念是针对于这段代码而言的而不是针对线程。 一个 无状态 的Servlet //程序清单2-1 一个无状态的Servelet @ThreadSafe public class StatelessFactorizer implements Servlet{ public void service(ServlerRequest req, ServletResponse resp){ BigInteger i = extractFromRequest(req); BigInteger[] factors = factor(i); encodeIntoResponse(resp, factors); } }

Netty(1)线程模型

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-09 05:00:35
前言 对于Netty框架的学习 前置知识点:线程模型 目录 线程模型概述 传统阻塞IO线程模型 Reactor基本思想 单Reactor单线程 单Reactor多线程 主从Reactor多线程 总结 线程模型概述 在学习Netty线程模型之前,先要搞清楚各个线程模型的发展过程,再进行Netty线程模型的了解 现有的线程模型: 传统阻塞IO线程模型(也就是BIO) Reactor 模式 其中Reactor模式根据Reactor的数量和线程的数量可以分为三种: 单Reactor单线程 单Reactor多线程 主从Reactor多线程 Netty框架是基于主从Reactor多线程模型进行改进(多个主Reactor) 传统阻塞IO线程模型 传统阻塞IO也就是Java BIO 很简单,就是一个连接一个线程的模型 每一个连接都创建一个线程去处理,而且当完成连接,读取数据时,如果没有数据可读会阻塞线程 传统阻塞IO线程模型缺点: 对于高并发的环境,会创建很多线程,系统开销大 阻塞IO模式会造成线程浪费 Reactor基本思想 Reactor模式是对传统阻塞IO模型的一种改进 其中基本思想有两个: 基于 I/O 复用模型 :多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理

java多线程

こ雲淡風輕ζ 提交于 2020-03-08 19:19:02
并行与并发 进程与线程 进程:正在执行的一个程序,例如一个软件,例如360。 线程:进程中的多个执行功能(进程中的一个执行单元),一个进程中至少有一个线程,例如360的电脑体检、木马查杀,每一个都是360的一个线程。 多线程保证的是多条线程交替执行。 多线程程序执行cpu的调度方式 java实现多线程的两种方式 两种方式的区别 耦合:如果子类继承父类,而子类什么方法都没有,一直在用父类的,突然子类不再继承父类,子类就废物了,耦合性(依赖度dongzh)太高, 实现的话,如果子类实现了父类的方法,突然不实现父类了,依然可以使用自己的方法。 来源: CSDN 作者: 快些儿 链接: https://blog.csdn.net/weixin_44431371/article/details/104737155

多线程

僤鯓⒐⒋嵵緔 提交于 2020-03-08 16:37:35
  大家好,本章我将给大家分享一下前几天自己对多线程的认知。    多线程 :是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。       线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.       线程和进程的区别在于,子进程和 父进程 有不同的代码和 数据空间 ,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,      根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。    多线程的三大特性: 原子性,可见性,有序性      原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。      可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。     有序性:即程序执行的顺序按照代码的先后顺序执行。    多线程的优缺点:   优点:     ·使用线程可以把占据时间长的程序中的任务放到后台去处理     ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个 进度条 来显示处理的进度     ·程序的运行速度可能加快     

多线程简介

你。 提交于 2020-03-08 13:05:29
多线程简介 作用 多线程可以解决耗时操作(网络操作)卡顿UI的问题,将耗时操作放在后 台,待工作完成后,通知主线程更新UI 一个线程的数据可以直接提供给其他线程使用,叫做 线程间通信 线程生命周期的控制 分类 任务(代码)执行的俩种方式 同步:多个任务按顺序执行 异步:多个任务可以"同时"执行,异步就是多线程的代名词,使用多线程 技术就是为了让任务在子线程异步执行 内容 进程和线程 系统中,正在运行的程序,进程中的任务都是线程中执行的,线程是 进程最基本的执行单元,进程启动后,会默认开启一条线程,即是主线程 多线程 一个进程可以开启多个线程,同时异步执行不同的任务 执行原理:CPU在多个线程之间来回的切换调度线程执行 优缺点:可以"适当"提高程序执行的效率,还可以提升用户体验,但是当 线程非常多时,反而会大量的消耗CPU的资源 使用规则:在实际开发中,需要使用时尽量简单的使用,如果不需要使用, 绝对不要瞎用 注意 主线程/UI线程 是进程启动后,自动开启的,专门处理UI事件和刷新UI的,不要在主线程执 行耗时操作,会卡死UI __bridge(桥接) 当遇到C和OC混合开发时,需要用到桥接,在ARC环境下,编辑器不负责C 语言申请的内存,当涉及到OC和C语言的类型转换时,需要使用桥接告知 编辑器如何管理内存,在MRC环境下不需要 线程属性 主线程在IOS 8以后是512K

Python-多线程

梦想的初衷 提交于 2020-03-08 13:01:47
多线程 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。   thread在python3中被废弃了   python3中threading代替thread模块   为了兼容性 python3将thread改名为 “_thread”   python的标准库提供了两个模块 ,_thread(低级模块) 和 threading(高级模块) 1.threading 启动一个线程就是把一个函数传入并创建threading.Thread( )实例,然后调用start( )开始执行: import threading #导入线程模块 import time #线程函数 def foo(num): print('我的进程名字为:'+threading.current_thread().name) time.sleep(2) print(num) #创建进程 #callback:回调函数 一般用来接收子进程运行函数的返回值 t1 = threading.Thread(target=foo,args=(1,),callback=func) t2 = threading.Thread(target=foo,args=(2,)) #启动线程 t1.start() t2.start() #获取线程运行状态 True为运行 False为未运行 print(t1.is

Unity C#笔记 协程详解(转)

ε祈祈猫儿з 提交于 2020-03-08 13:00:47
目录 什么是协程 多线程 协程 协程的使用场景 协程使用示例 Invoke的缺陷 协程语法 开启协程 终止协程 挂起 协程的执行原理 什么是协程 在Unity中,协程(Coroutines)的形式是我最喜欢的功能之一,我都会使用它来控制需要定时的。 协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行。 可能看了这段文字介绍还是有点模糊,其实可以用多线程来比较。 多线程 多线程,顾名思义,多条同时执行的线程。 最初,多线程的诞生是为了解决IO阻塞问题,如今多线程可以解决许多同样需要异步方法的问题(例如网络等)。 所谓异步,通俗点讲,就是我走我的线程,你走你的线程。当某个线程阻塞时,另一个线程不会受影响继续执行。 需要认识到的是,多线程并不是真正意义上的多条线程同时执行。 它的实际是将一个时间段分成若干个时间片,每个线程轮流运行一个时间片。 (如图,将执行步骤切分成极小的粒度,然后依次运行) 但是由于时间片粒度非常非常小,几乎看不出区别,所以程序执行效果跟真正意义上的并行执行效果基本一致。 多线程的缺陷 然而多线程有一个坏处,就是可能造成共享数据的冲突。 假如有一个变量i = 0, Step1_1的操作是进行++i操作,Step2_1的操作是进行--i操作。 我们预期最终结果i为0。 但由于操作切分得过小,可能会发生这样顺序的事: 线程1:访问i, 将0存到寄存器

多线程 - 守护线程Daemon是什么

北战南征 提交于 2020-03-08 12:05:42
Java线程分为用户线程和守护线程。 守护线程是程序运行的时候在后台提供一种通用服务的线程。这意味着,当一个 Java 虚拟机中不存在非 Daemon 线程的时候, Java 虚拟机也会同时停掉所有守护线程,然后退出。 Java中把线程设置为守护线程的方法:在 start 线程之前调用线程的 setDaemon(true) 方法。 注意: setDaemon(true) 必须在 start() 之前设置,否则会抛出IllegalThreadStateException异常,该线程仍默认为用户线程,继续执行 Daemon 线程被用作完成支持性工作,但是在 Java 虚拟机退出时, Daemon 线程中的 finally 块并不一定会执行 。 在构建 Daemon 线程时,不能依靠 finally 块中 的内容来确保执行关闭或清理资源的逻辑 。 守护线程创建的线程也是守护线程 守护线程不应该访问、写入持久化资源,如文件、数据库,因为它会在任何时间被停止,导致资源未释放、数据写入中断等问题 来源: https://www.cnblogs.com/frankcui/p/12441626.html

多进程多线程简单说明,System V IPC 简介(本机IPC)【linux】(zz)

会有一股神秘感。 提交于 2020-03-08 10:04:16
多进程多线程简单说明 涉及管道通信的多进程和多线程说明 对比多进程和多线程各自使用的场合 线程 进程 System V IPC(本机IPC) 有关System V IPC System V IPC的特点 管道(原始IPC) System V IPC 使用System V IPC时,不存在亲缘进程的说法 System V IPC标识符 怎么才能得到这个“标识符” System V IPC标识符的作用? 多进程多线程简单说明 涉及管道通信的多进程和多线程说明 在使用有名管道实现双向通信时,由于读管道是阻塞读的,为了不让“读操作”阻塞“写操作”,使用了父子进 程来多线操作, 1)父进程这条线:读管道1 2)子进程这条线:写管道2 实际上我们后面在线程以后,凡是涉及到多线操作的,基本都使用多线程来实现 ,比如 1)主线程:读管道1 2)次线程:写管道2 我们这里通过进程间通信的管道方法实现,还会有线程实现的博客说明。 也就是说上面的管道通信, 我们完全可以把父进程改为主线程,把子进程改为次线程 。 对比多进程和多线程各自使用的场合 线程和进程都是并发运行的 ,但是线程和进程各自的使用的场合有所不同。 线程 凡是涉及多线时,我们使用线程来并发实现,比如我们上面实现的“有名管道”双向通信的例子,这个多线操作理论上就应该使用多线程来实现。 因为多线使用线程更省计算机cpu和内存的开销。

iOS中实现多线程的技术方案

老子叫甜甜 提交于 2020-03-08 10:02:59
pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; i++) { NSLog(@"---buttonclick---%zd---%@", i, [NSThread currentThread]); } return NULL; } @implementation ViewController - (IBAction)clickButton:(id)sender { // 定义一个线程 pthread_t thread; // 创建一个线程 (参1)pthread_t *restrict:创建线程的指针,(参2)const pthread_attr_t *restrict:线程属性 (参3)void *(*)(void *):线程执行的函数的指针,(参4)void *restrict:null pthread_create(&thread, NULL, run, NULL); // 何时回收线程不需要你考虑 pthread_t thread2; pthread_create(&thread2, NULL, run, NULL); } NSThread实现多线程 一个 NSThread 对象就代表一条线程 创建线程的多种方式 第一种方式:先创建再启动线程 // 创建线程