
线程
文章平均质量分 79
程序员小董
毕业后先在腾讯做了近3年的kv存储引擎开发
之后在阿里做了3年多互动游戏的开发
展开
-
线程的创建(Runnable,Future,CompletionService,CompletableFuture的辨析)
上面三种启动线程的方式,都只是用来学习的,并不推荐,因为每个任务都启动一个线程去执行,实在是太慢了,我们一般都会使用线程池。代码如上,使用FutureTask来承接Callable,Callable里面存放需要执行的任务。直接让某个类继承Thread类,复写run方法,外部调用的时候直接调用start方法。使用runnable解决java单继承的问题,但是也还有一个问题,那就是,没有返回值。另外如果future的结果还没有出来,调用它的get方法就会阻塞。FutureTask的run方法会阻塞主进程!原创 2023-06-02 18:10:01 · 470 阅读 · 0 评论 -
线程池判断当前任务组是否都已经结束
最近写测试代码的时候,需要判断提交的线程池里面的任务是否都已经全部执行完成。在网上找到了一圈,发现这篇博客写到算是比较完整的。但是还是有几个问题。原创 2024-12-08 20:43:47 · 135 阅读 · 0 评论 -
关于RedissonLock的一些所思
就是业务方使用锁的时候,也不用指定那个自动删除时间,用户使用锁的时候Redisson就会自动每隔10s调用一次redis,把锁的超时时间往后推30s。使用锁的时候,有个问题,就是当某个线程从redis拿到了锁之后,一般要告诉redis这个锁最长多久就要自动删除(如果不这么做,一旦某个线程自己死掉了,那redis就认为这锁一直被某个线程持有着,就不会放别的线程进来了,相当于卡死了整个系统)就上面的例子里,如果某个线程已经拿到了my_order的锁,那别的线程调用myLock.lock方法就会阻塞。原创 2023-02-17 14:40:42 · 2018 阅读 · 0 评论 -
ThreadPoolExecutor自定义线程池示例
转载原创 2023-02-08 11:46:01 · 453 阅读 · 0 评论 -
分布式锁的进化过程
使用setnx 来作为锁的底层实现case1 拿到锁 执行代码 但是如果此时服务器宕机就完了case2 拿到锁 设置超时时间 然后执行代码 存在两个问题 2.1 设置超时时间和获取锁 得原子性完成 2.2 如果超时时间到了 任务还没有完成 怎么办?2.2 存在两个问题 假如 a 先获得锁 设置十秒过期 a运行完成需要15s b在第十秒拿到了锁 此时两个线程都拥有锁(第一个问题) 等到第15s,a删除了锁,此时b相当于没有锁的保护了,谁想进来就都能进来(第...原创 2022-02-20 16:17:43 · 1414 阅读 · 0 评论 -
关于分布式session
关于session和cookie的历史渊源http协议是没有状态的,也就是说你第一次访问www.taobao.com然后登录,之后第二次访问www.taobao.com的时候,服务器并不知道你已经登录了这就像你去超市,超市的门卫是个健忘症晚期的老头,你第二天去,他就忘了你昨天已经来过了那具体咱们办呢?第一个方法你每次去的时候,带一个小纸板,上面写着我叫dale,是陕西咸阳人,今年28岁...原创 2020-04-06 12:55:11 · 291 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁的使用1
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》的学习笔记。一个简单的例子两个线程,一个不断打印a,一个不断打印bpublic class LockTest { public static void main(String[] args){ final Outputer outputer = new Outputer(); n原创 2015-01-20 16:06:13 · 2830 阅读 · 3 评论 -
Fork And Join框架初探
首先,关于Fork And Join框架的入门资料我觉得最好的是: Java线程(十一):Fork/Join-Java并行计算框架本文参考了这篇文章Fork/Join框架的核心类是ForkJoinPool,它能够接收一个ForkJoinTask,并得到计算结果。ForkJoinTask有两个子类,RecursiveTask(有返回值)和RecursiveAction(无返回结果),我们原创 2016-04-14 23:32:31 · 814 阅读 · 0 评论 -
Java同步工具类总结
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》的学习笔记。Semaphore这个东西和之前的synchronized干的事差不多。synchronized保证了,我管理的那部分代码同一时刻只有一个线程能访问Semaphore保证了,我管理的那部分代码同一时刻最多可以有n个线程访问package cn.itcast.heima2;import ja原创 2016-05-12 11:15:03 · 2605 阅读 · 0 评论 -
谈谈java中的线程(初级概念)
定义关于进程与线程的定义 可参看一下这个介绍http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html在不细抠定义的情况下我们可以认为 在操作系统里一个任务就是一个进程 像word,qq都可以看做一个进程.另一方面如果这个进程内部的函数调用 就是一条线 那它就是单线程如果有多条线 那就是多线程 而在这个原创 2014-10-15 14:39:23 · 1166 阅读 · 0 评论 -
生产者消费者的java实现
先看最简单的,也就是缓冲区的容量为1缓冲区容量为1import java.util.List;public class ProducerAndConsumer2 { static class AddThread implements Runnable { Plate plate; public AddThread(Plate p) {原创 2015-01-23 16:19:21 · 1193 阅读 · 1 评论 -
聊聊Condition
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》的学习笔记。上面我们说了Lock,那是对synchronized的一种更为面向对象的替代,在原来的synchronized内部,我们可以调用object的wait与notify方法,那么使用lock之后,如何进行线程的通信呢。对锁不清楚的朋友可以看看http://blog.youkuaiyun.com/dlf123321/ar原创 2016-05-10 20:17:41 · 3727 阅读 · 0 评论 -
深入理解ThreadLocal
ThreadLocal是一个和线程安全相关的类。一个非线程安全的例子在我们讲述它之前,我们先看一个例子。package thread;public class NotSafeThread implements Runnable{ private int a=10; public void run() { // TODO Auto-gen原创 2015-01-08 21:39:06 · 1766 阅读 · 3 评论 -
tomcat中的线程问题2
最近在看线程的有关知识,碰到一个小问题,目前还没有解决,现记录下来。如果在我们自己写的servlet里有成员变量,因为多线程的访问就会出现一些线程问题。这点大家都知道,我们看下面的例子。public class ConcurrentTest extends HttpServlet { PrintWriter output; @Override protected原创 2015-01-03 21:26:09 · 1486 阅读 · 1 评论 -
tomcat中的线程问题
看这篇文章之前,请先阅读:how tomcat works 读书笔记 十一 StandWrapper 上 地址如下:http://blog.youkuaiyun.com/dlf123321/article/details/41247693在tomcat中,用户的一个请求会被一个servlet来处理。那么当第一个人请求servletA时,它会在tomcat内部的类加载器中加载,得到一个ser原创 2014-12-29 00:25:52 · 2346 阅读 · 2 评论 -
Concurrent包常用方法简介
1 Executor接口留给开发者自己实现的接口,一般情况下不需要再去实现。它只有一个方法void execute(Runnable command)2 ExecutorService接口它继承自Executor接口,但多了如下3个功能终止任务。体现在这几个方法void shutdown()线程池关闭,不接受新任务,即不能再执行submi转载 2015-01-12 17:55:34 · 815 阅读 · 0 评论 -
java并发基础总结
1 什么是并发问题。 多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。 银行两操作员同时操作同一账户就是典型的例子。比如A、B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户减去 50元,A先提交,B后提交。 最后实际账户余额为1000-50=950元,但本该为 1000+100-50=1050。这就是典型的并发问题。如何转载 2015-01-12 17:32:33 · 716 阅读 · 0 评论 -
Java多线程之Lock的使用
转载自http://blog.youkuaiyun.com/huang_xw/article/details/7090177 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future;转载 2015-01-12 16:13:05 · 674 阅读 · 0 评论 -
java5后的并发池
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》视频的学习记录。为什么需要并发池之前写并发的时候new Thread(new Runnable(){ public void run{ //.... }}).start();没有什么问题呀,为什么需要并发池呢?我们拿tomcat来举个例子。每次我们对服务器做一个请求,tomcat就得分出一个线原创 2015-01-19 17:38:26 · 1231 阅读 · 0 评论 -
Java线程专栏文章汇总
转载自blog.youkuaiyun.com/ghsau/article/details/17609747 JDK5.0之前传统线程 Java线程(一):线程安全与不安全 Java线程(二):线程同步synchronized和volatile Java线程(三):线程协作-生产者/消费者问题 Java线程(四):转载 2015-01-12 22:02:38 · 645 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁的使用2
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》的学习笔记。这一节我们做一个缓存系统。在读本节前请先阅读ReentrantReadWriteLock读写锁的使用1第一版public class CacheDemo { private Map cache = new HashMap(); public static void main原创 2015-01-20 22:39:51 · 1281 阅读 · 1 评论 -
线程通信
节录于>题目概述主线程执行10次 然后子线程执行5次 接着主线程再执行10次 子线程执行5次....一直循环50次。首先我们应该明白我们的线程逻辑在于"主线程执行10次 然后子线程执行5次"至于循环50次不是我们最核心的业务逻辑。因而我们先把"主线程执行10次 然后子线程执行5次"放到一个类中。第一步class Business{ public原创 2015-01-15 22:47:51 · 897 阅读 · 0 评论 -
java实现多线程下载
本篇博客可认为是对 使用java实现http多线程下载 一文的再次解读。首先,从宏观来说java实现多线程下载这个功能的实现由以下几部分组成:1 建立多个线程去分别下载文件的一部分。2 将多个线程下载的文件(还在内存中),写入硬盘中的一个文件。3 断点续传GET /Path/FileName HTTP/1.0 Host: www.server.com:8原创 2015-03-09 21:09:33 · 990 阅读 · 0 评论 -
关于synchronized
如果用synchronized修饰一个类成员方法A,那么就不会出现下面的情况:同时多个线程访问这个类的A方法。当然如果还有一个方法B,它没有被synchronized修饰,那么A方法与B方法是可以并行执行的。如下:package thread;public class SyncTest implements Runnable { public synchroniz原创 2015-01-03 22:46:49 · 2160 阅读 · 0 评论 -
传统定时器技术 Timer and TimerTask
本文为张孝祥java并发课程的学习笔记。java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建。 我们看看看Timer的api文档它拥有以下的几个方法cancel,取消任务purge,移除已经取消的原创 2015-01-15 15:29:47 · 1362 阅读 · 0 评论 -
ThreadLocal深入理解 修订版
本文是传智博客多线程视频的学习笔记。原版本见http://blog.youkuaiyun.com/dlf123321/article/details/42531979ThreadLocal是一个和线程安全相关的类。它能干什么?能保证在一个线程内,某个变量的全局共享。说的很模糊,咱们看一个图线程1里面的数据,应该在线程1范围内的模块a,b,c都能访问。线程2里面的原创 2015-01-26 16:23:47 · 1363 阅读 · 0 评论