Wesley13 Wesley13
3年前
java并发编程实战:第十六章
一、什么是内存模型,为什么要使用它如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果编译器把变量保存在本地寄存器而不是内存中编译器中生成的指令顺序,可以与源代码中的顺序不同处理器采用乱序或并行的方式来执行指令保存在处理器本地缓存中的值,对于其他处理器是不可见在单线程中,只要
Wesley13 Wesley13
3年前
java 中断线程的几种方式 interrupt()
中断  中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作。线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序。虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果。你最好还是牢记以下的几点告诫。  首先,忘掉Thread.stop方法。虽然它确实停止了一个正
Wesley13 Wesley13
3年前
Java之——内存模型(八种操作+同步规则)
同步八种操作(1)lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占状态;(2)unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定;(3)read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便后续的load动作使用;(4)load(
Wesley13 Wesley13
3年前
Java 之 synchronized 详解
一、概念synchronized是Java中的关键字,是利用锁的机制来实现同步的。锁机制有如下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确
Wesley13 Wesley13
3年前
JS异步的底层原理:单线程加事件队列
异步的底层原理:单线程事件队列。js的代码执行时单线程的,所谓单线程:就是js代码时从上到下按顺序依次执行的,一次只能做一件事情。事件队列可以看作一个容器,这个容器存储着js的回调函数,只有js代码执行结束后,才会去事件队列中调用这些回调函数。例:1//以下的代码先执行for循环,再输出sum值,然后输出正常代码执行,最后
Stella981 Stella981
3年前
Netty中的永动机
永动机即'永远运动的机器'.作为服务端时,需要接收客户端的连接,需要接收客户端的数据,或者向客户端发送数据.既然需要接收客户端的连接,那么就需要一个IO线程永远的执行一个无限循环.只有一直循环着,才能一直接收新的连接.NioEventLoop的底层绑定一个线程,这个线程在启动之后,就会一直无限循环着,而且只做三件事
Wesley13 Wesley13
3年前
Java并发编程:进程、线程、并行与并发
一谈到Java并发编程,我们一般就会联想起进程、线程、并行、并发等等概念。那么这些概念都代表什么呢?进程与线程有什么关系?并发与并行又是什么关系呢?01 进程与线程进程是指程序的一次动态执行过程,通常我们说计算机中正在执行的程序就是进程,每个程序都会对应着一个进程。一个进程包含了从代码加载到执行完成的一个完整过程,它是操作系
Wesley13 Wesley13
3年前
Java多线程下的协同控制,这些你都知道了吗?
协同控制是并发程序必不可少的重要手段。主要分为两大控制方法,一个是JDK提供的最基础的协同控制方法,一个是java.util.concurrent包下的拓展类控制,接下来我们将会介绍这两种方法有哪些操作可以进行同步控制。一、基础的协同控制线程基础知识因为加锁涉及到多线程,所以有必要先说一下线程的基础知识(定义那
Stella981 Stella981
3年前
Redis客户端多线程跟多个连接不是一回事
先抱怨一波,大国庆节的放假前一天的下班前15分钟,通知让我加班,因为一个Redis的bug,而这个bug我在1个半小时之前刚听说了个大概,心里很不情愿;好了,说正事;问题现象:bug是这样的,两个线程同时请求Redis服务器,但是只有一个线程收到了回复,另一个线程卡死;拿到这个问题,我先是想了想到底怎么查,于是想了可能出问题的
Stella981 Stella981
3年前
Notification使用详解之三:通过服务更新进度通知&在Activity中监听服务进度
上次我们讲到如何实现一个可更新的进度通知,实现的方式是启动一个线程模拟一个下载任务,然后根据任务进度向UI线程消息队列发送进度消息,UI线程根据进度消息更新通知的UI界面。可是在实际应用中,我们一般会将上传、下载等比较耗时的后台任务以服务的形式运行,更新进度通知也是交由后台服务来完成的。不过有的时候,除了在通知里面显示进度信息,我们也要在Activit