因为多线程的时候,线程之间的数据共享,最大的危险是都可以来修改变量例如 共享变量balance初始化为0 ,先加后减理论上最后的数值应该是0 ,但是经过t1,t2多次运行后balance的结果就不一定是0 代码正常运行就像下边: 那是因为 balance = balance + n 是先将balan ...
分类:
编程语言 时间:
2019-10-23 19:59:32
阅读次数:
76
基础概念 一、进程、程序和线程 程序:程序只是一堆代码而已 进程:指的是程序的运行过程,是对正在运行程序的一个抽象。进程是一个资源单位 线程:每个进程有一个地址空间,而且默认就有一个控制线程。线程才是cpu上的执行单位 二、并发与并行 无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是 ...
分类:
编程语言 时间:
2019-10-02 21:00:50
阅读次数:
132
在博客园里翻过很多博客,对高手们甚是敬畏,谢谢你们教会了我许多!我也尝试贡献一点自己的学习心得,这是我的第一篇博客,纯原创,谢谢。 这里我想聊的是ThreadLocal,本地线程变量。不单独作概念上的解释了,网上太多。我以一个案例为主线一步步说明为什么我们需要用ThreadLocal?使用Threa ...
分类:
其他好文 时间:
2019-08-11 17:37:09
阅读次数:
384
Python通过两个标准库thread和threading提供对线程的支持。thread提供了低级别的、原始的线程以及一个简单的锁。 threading 模块提供的其他方法: threading.currentThread(): 返回当前的线程变量。 threading.enumerate(): 返 ...
分类:
编程语言 时间:
2019-08-05 17:20:07
阅读次数:
118
关于Java线程问题,在博客上看到一篇文章挺好的: https://blog.csdn.net/w172087242/article/details/83375022#23_ThreadLocal_175 自己动手实验了一下。 1、maven设置 <properties> <project.buil ...
分类:
编程语言 时间:
2019-06-13 14:02:27
阅读次数:
88
一、配置流程 1.流程示意图(通过XML映射文件实现): 2.流程: 数据库驱动包(本文以MySQL为例):https://mvnrepository.com/artifact/mysql/mysql-connector-java Mybatis框架包:https://mvnrepository.c ...
分类:
其他好文 时间:
2019-04-28 20:44:05
阅读次数:
167
一.ThreadLocal线程变量的实现原理 1.ThreadLocal核心方法有这个几个 get()、set(value)、remove() 2.实现原理 ThreadLocal在每个线程都会创建一个线程内对应的T的副本,本T数据可以在本线程内任何地方可以被使用。线程之间互相不影响,所以是线程安全 ...
分类:
编程语言 时间:
2019-02-26 13:49:10
阅读次数:
204
1.尽量将共享变量(共享变量指的是在堆内存上创建的对象或者数组,包括成员变量、静态变量和数组元素。)定义为局部变量。 2.如果多线程只是读取变量,可以定义全局final。 3.使用ThreadLocal将变量创建为线程私有。 4.加锁 锁的重入指的是:当一个线程请求获得已经被其他线程获得的锁的时候, ...
分类:
编程语言 时间:
2019-02-21 00:33:22
阅读次数:
161
一 JVM和类: 运行Java: java 或空格带有main方法的类名 目的:启动JVM,并加载字节码. 当调用java命令来运行某个Java程序时,该命令将会启动一个JVM进程.同一个JVM中的所有线程,变量都处于同一个进程中,共享该JVM的内存区域. 当出现以下情况是,JVM会退出: 1):程 ...
分类:
编程语言 时间:
2018-12-06 00:09:49
阅读次数:
194
一个进程可以多线程,但是多线程就像是十字路,一个线程挂了,如果对多线程的共享堆、全局变量等非栈内存造成了影响,那么它所属的进程就挂了。 而多进程则像是立交桥,互不想干。一个进程挂了不会导致整个程序崩溃。所以在想要保证 程序的可用性(不会动不动就堵塞)是可以使用多进程,也可以保证主进程的稳定,比如在对 ...
分类:
编程语言 时间:
2018-11-17 20:41:21
阅读次数:
221