随笔分类 -  [701]多线程并发

基础知识
摘要:在面试头条的时候,有一个很有意思的题目,利用两个线程交替打印一个字符串,这里主要就是对多线程中wait/notify的应用,特此记录。 对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有: 上面是官方文档的简介,下面我们根据官方文档总结一下: wait( 阅读全文
posted @ 2018-08-15 13:37 DarrenChan陈驰 阅读(1355) 评论(0) 推荐(0) 编辑
摘要:一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。 原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集 阅读全文
posted @ 2018-03-28 20:19 DarrenChan陈驰 阅读(372) 评论(0) 推荐(0) 编辑
摘要:首先我们对读写锁做一个概述: 假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写,也就是说:读-读能 阅读全文
posted @ 2018-03-21 20:39 DarrenChan陈驰 阅读(6443) 评论(2) 推荐(2) 编辑
摘要:今天,想谈一下Python中的进程和线程。 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下。 1. 进程和线程的关系 既然谈论到进程和线程,当然要老生常谈一个问题,那就是什么是进程,什么又是线程呢? 阅读全文
posted @ 2017-11-30 19:51 DarrenChan陈驰 阅读(2847) 评论(0) 推荐(1) 编辑
摘要:1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。 2)在Java中Lock接口比synchronized块的优势是什 阅读全文
posted @ 2017-11-18 19:39 DarrenChan陈驰 阅读(1609) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上 阅读全文
posted @ 2017-04-13 12:14 DarrenChan陈驰 阅读(335) 评论(0) 推荐(0) 编辑
摘要:BlockingQueue是java.util.concurrent下的主要用来控制线程同步的工具。 主要的方法是:put、take一对阻塞存取;add、poll一对非阻塞存取。 插入: 1) add(anObject):把anObject加到BlockingQueue里,即如果BlockingQu 阅读全文
posted @ 2017-03-11 11:07 DarrenChan陈驰 阅读(1597) 评论(0) 推荐(0) 编辑
摘要:关于线程池的介绍,请看上一篇博客:http://www.cnblogs.com/DarrenChan/p/5774921.html 1. 线程池的5中创建方式 1) Single Thread Executor : 只有一个线程的线程池,因此所有提交的任务是顺序执行, 代码: Executors.n 阅读全文
posted @ 2017-03-10 23:26 DarrenChan陈驰 阅读(345) 评论(0) 推荐(0) 编辑
摘要:1.lock和synchronized的区别 1)Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性。Lock是一个类,通过这个类可以实现同步访问; 2)Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放 阅读全文
posted @ 2017-03-09 23:53 DarrenChan陈驰 阅读(5916) 评论(0) 推荐(0) 编辑
摘要:1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以那么做。 2.如果每个线程执行的代码不同,这时候就需要用不同的Runnable对象,有如下两种方式来实现这些Runnable对象之间的数据共享: 1)将共享数据封装到另外 阅读全文
posted @ 2016-09-03 23:43 DarrenChan陈驰 阅读(515) 评论(0) 推荐(0) 编辑
摘要:首先用一个程序模拟一下ThreadLocal: 运行结果: Thread[Thread-1,5,main], data:1170863694Thread[Thread-0,5,main], data:1982496284Thread[Thread-1,5,main]调用A, data:1170863 阅读全文
posted @ 2016-08-16 04:36 DarrenChan陈驰 阅读(457) 评论(0) 推荐(0) 编辑
摘要:线程的运行机制 开启线程过多,会消耗cpu 单核cpu,同一时刻只能处理一个线程,多核cpu同一时刻可以处理多个线程 操作系统为每个运行线程安排一定的CPU时间 ,系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,因为时间相当短,多个线程频繁地发生切换,因此给用户的感觉就是好像多个线程 阅读全文
posted @ 2016-08-16 03:13 DarrenChan陈驰 阅读(369) 评论(0) 推荐(0) 编辑
摘要:昨天写了一个多线程的程序,却发现了一个很奇特的问题,就是我的map对象明明put了,可是get的时候竟然会取到null,而且尝试多次,有时候成功,有时候取到null,并不确定。 程序代码如下: 运行结果如下: Thread[Thread-0,5,main], data:1164116165Threa 阅读全文
posted @ 2016-08-10 14:04 DarrenChan陈驰 阅读(3921) 评论(0) 推荐(1) 编辑
摘要:一道关于多线程通信的笔试题,个人觉得值得推荐。问题描述: 子线程循环10次,主线程循环100次,接着又回到子线程循环10次,接着又回到主线程循环100次。以此类推,总共循环50次。问题分析: 显然,这是一道多线程的问题。由于开启多个线程之后,是靠CPU分发时间片运行的,谁拿到时间片谁运行。但是可能A 阅读全文
posted @ 2016-08-06 03:08 DarrenChan陈驰 阅读(399) 评论(0) 推荐(0) 编辑
摘要:1.synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调 阅读全文
posted @ 2016-08-05 02:49 DarrenChan陈驰 阅读(426) 评论(0) 推荐(0) 编辑
摘要:今天做了两道笔试题,收益良多。有些题,你会发现,虽然并不难,但是却很容易没有思路或者出错,这都是源自平时的不求甚解。很多知识点,自以为已经掌握,其实只是管中窥豹,可见一斑。不要一味墨守成规,也要用于思考,很多东西既要知其然,也要知其所以然。我一直觉得了解和精通中间差着十万八千里,看来还有很长一段路要 阅读全文
posted @ 2016-08-04 01:19 DarrenChan陈驰 阅读(304) 评论(1) 推荐(0) 编辑
摘要:1. Thread.sleep(long) 和Thread.yield()都是Thread类的静态方法,在调用的时候都是Thread.sleep(long)/Thread.yield()的方式进行调用。而join()是由线程对象来调用。 2. Thread.sleep(long)是让当前运行的线程睡 阅读全文
posted @ 2016-08-03 15:35 DarrenChan陈驰 阅读(449) 评论(0) 推荐(0) 编辑

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示