
多线程知识
文章平均质量分 76
迪迪调调
工作总结与日常学习
展开
-
多线程学习(三)之创建线程的两种方式
注:多线程学习主要参照张孝祥的视频教程,本文的将学习的内容记录下来,以便以后作为笔记回顾! 1.创建线程的两种传统方式: public class TreadTest { public static void main(String[] args) { //第一种方式,覆盖父类的run方法 Thread t=new Thread(){原创 2017-03-17 14:56:59 · 350 阅读 · 0 评论 -
多线程学习一
一:概述 进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以多执行路径,称之为多线程。 一个进程中至少要有一个线程。 开启多个线程是为了同时运行多部分代码。 每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。原创 2016-08-24 16:33:32 · 505 阅读 · 0 评论 -
多线程学习二
买票事例: 先看下面的例子 class Ticket extends Thread{ private int num=5; public void run(){ boolean flag=true; while(flag){ if (num>0) { System.out.println(Thread.currentThread().原创 2016-08-25 11:22:41 · 321 阅读 · 0 评论 -
多线程学习(九)-可阻塞的队列
阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量。 ArrayBlockingQueue只有put方法和take方法才具有阻塞功能 在java.util.concurrent.Lock接口中实现了一个阻塞的缓冲区,在上面的一篇博客有介绍:阻塞队列的一个实现。 import java.util.con原创 2017-03-17 16:53:07 · 251 阅读 · 0 评论 -
多线程学习(八)-线程并发库里的其他类
1.Semaphore实现信号灯 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其 中在等待的另原创 2017-03-17 16:15:18 · 311 阅读 · 0 评论 -
多线程学习(十)-同步集合类
java提供的同步集合类是为了解决传统的集合类线程不安全的问题。 1.传统集合类在并发访问时的问题说明:http://blog.163.com/wm_at163/blog/static/1321734902011819112952993/ 2.传统方式下用Collections工具类提供的synchronizedCollection方法来获得同步集合。 synchronizedColl原创 2017-03-17 17:23:07 · 317 阅读 · 0 评论 -
多线程学习(七)-读写锁(ReentrantReadWriteLock)与应用(缓存)
读写锁(ReentrantReadWriteLock):分为读锁和写锁 读写锁机制 读-读不互斥 读-写互斥 写-写互斥 如果只读数据,可以多个线程读,但是不能同时有写的线程,上读锁 如果需要写数据,则不能有读的线程,且只能有一个线程写数据,上写锁。(如果上了读锁,需要先释放读锁) 线程进入读锁的前提条件: 没有其他线程的写锁, 没有原创 2017-03-14 16:14:02 · 572 阅读 · 0 评论 -
多线程学习(六)-同步通信
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 在等待 Condition 时,允许发生“虚假唤醒”,这通常作为对基础平台语义的让步。对于大多数应用程序,这带来的实际影响很小,因为 Condition 应该总是在一个循环中被等待,并测试正被等待的状态声明。某个实现可以随意移除可能的虚假唤醒,但建议应用程序程序员总是假定这些虚假唤醒可能发生,因此总是在一个循环中等原创 2017-03-14 17:54:58 · 415 阅读 · 0 评论 -
多线程学习(五)之Callable&Future
Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的。 Callable要采用ExecutorSevice的submit方法提交,返回的future对象可以取消任务。 CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable对应的Future对象。 好比我同时种了几块地的麦子,然后就等待收割。收割时,则原创 2017-03-17 15:41:26 · 303 阅读 · 0 评论 -
java线程池
对java.util.concurrent包中创建线程池的几个方法做简单记录 1.Executors.newFixedThreadPool(int nTreads) 创建固定线程数,创建的 线程数为nThreads import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; pub原创 2017-03-14 10:32:06 · 453 阅读 · 0 评论 -
多线程学习(四)-线程范围内共享数据
转载自http://www.cnblogs.com/zhangshiwen/p/5042331.html 多线程范围内的数据共享 多线程范围内的共享解决方法参考有4中: 1.如果线程执行的代码相同,多个线程共享同一个runnable对象时,将共享数据放在runnable对象 2.如果多个线程执行的代码不同,将共享数据封装到一个对象中,将这个对象逐一传递给各个runnable对象原创 2017-03-13 19:24:35 · 292 阅读 · 0 评论 -
线程池ThreadPool工作中的再次思考
ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池corePoolSize,最大线程池大小maximumPoolSize,拒绝策略。构造方法: ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit,...原创 2018-04-15 18:36:10 · 679 阅读 · 0 评论