![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大数据,多线程
龙骨
这个作者很懒,什么都没留下…
展开
-
唠唠大数据中的多线程
一、线程组--Threadgroup线程组:当线程很多,需要进行分类管理public class Threadgroup { public static void main(String[] args) { ThreadGroup group=new ThreadGroup("女线程") { @Override原创 2017-01-09 03:29:49 · 362 阅读 · 0 评论 -
BlockingQueue
ava.util.concurrent提供了多种并发容器,总体上来说有4类Queue类:BlockingQueue ConcurrentLinkedQueueMap类:ConcurrentMapSet类:ConcurrentSkipListSet CopyOnWriteArraySetList类:CopyOnWriteArrayList接下来一系列文章,我会对每一类的源码进行转载 2017-01-11 11:44:15 · 474 阅读 · 0 评论 -
The Asynchronous Channel API 异步通道API
异步channel API主要引入三个异步类: AsynchronousFileChannel,AsynchronousSocketChannel, and AsynchronousServerSocketChannel.AsynchronousFileChannel跟FileChannel区别:不保存全局的position和offset,可以制定访问位置,也支持并发访问文件不同。转载 2017-01-16 01:29:16 · 694 阅读 · 0 评论 -
DelayQueue
DelayQueue是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的Delayed 元素。常常会遇到一些延迟任务转载 2017-01-11 15:11:06 · 460 阅读 · 0 评论 -
Java ThreadFactory接口用法与源码实现
根据需要创建新线程的对象。使用线程工厂就无需再手工编写对 new Thread 的调用了,从而允许应用程序使用特殊的线程子类、属性等等。JDK中的介绍:An object that creates new threads on demand. Using thread factories removes hardwiring of calls tonew Thread, ena转载 2017-01-11 10:57:33 · 2367 阅读 · 0 评论 -
同步队列SynchronousQueue
Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为数据元素转载 2017-01-12 01:40:00 · 704 阅读 · 0 评论 -
Copy-On-Write容器与CopyOnWriteArrayList理解
除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的)。先回顾一下一个常识:1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CPU时间。2、J...转载 2017-01-12 10:42:40 · 2956 阅读 · 0 评论 -
PipedInputStream和PipedOutputStream
PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线转载 2017-01-12 17:55:10 · 826 阅读 · 0 评论 -
读写锁(read-write lock)机制-----多线程同步问题的解决
读写锁(read-write lock)一 综述 在一些程序中存在读者写者问题,也就是说,对某些资源的访问会 存在两种可能的情况,一种是访问必须是排它行的,就是独占的意思,这称作写操作;另一种情况就是访问方式可以是共享的,就是说可以有多个线程同时去访问某个资源,这种就称作读操作。这个问题模型是从对文件的读写操作中引申出来的。 读写锁比起mutex具有更高的适用性,具有更高转载 2017-01-12 12:17:49 · 4428 阅读 · 0 评论 -
ThreadPoolExecutor中策略的选择与工作队列的选择(java线程池)
工作原理1、线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。2、当调用 execute() 方法添加一个任务时,线程池会做如下判断: a. 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务; b. 如果正在运行的线程数量大于或等于 corePoolSi转载 2017-01-13 09:39:21 · 449 阅读 · 0 评论 -
ThreadPoolExecutor线程池的分析和使用
1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指转载 2017-01-13 09:45:44 · 443 阅读 · 0 评论 -
大数据下多线程对文件的检索
今儿在服务器上处理了一个30G+的文件,把Xmx飚到了128000m,感觉一般般,现把代码贴出来,借以抛砖引玉1、开辟1000个线程操作3.6E数据对其进行检索,为保证负载均衡,999个线程每个线程读N/999大小的数据块,第1000个线程读不足数据块大小的数据代码不难,就直接代码了。public class LoadFile{ public String[] myspaces;原创 2017-02-03 23:10:22 · 754 阅读 · 0 评论 -
BIO与NIO、AIO
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者转载 2017-01-16 02:06:54 · 360 阅读 · 2 评论 -
生产者消费者解读
1、jdk1.5前实现一个简单的生产者消费者模型一把锁 多个生产者多个消费者 -- 实现生产一个消费一个class Product3{ private String name; private int count; private boolean flag; //生产产品的功能 public synchronized void produ原创 2017-02-03 17:06:29 · 362 阅读 · 0 评论 -
Java线程池
根据摩尔定律(Moore’s law),集成电路晶体管的数量差不多每两年就会翻一倍。但是晶体管数量指数级的增长不一定会导致 CPU 性能的指数级增长。处理器制造商花了很多年来提高时钟频率和指令并行。在新一代的处理器上,单线程程序的执行速率确实有所提高。但是,时钟频率不可能无限制地提高,如处理器AMD FX-9590 的时钟频率达到5 GHz,这已经非常困难了。如今处理器制造商更喜欢采用多核转载 2017-01-11 10:42:28 · 252 阅读 · 0 评论 -
Executors
Executors类是JDK 1.5开始自带的一个非常强大的主要用于创建各类线程池的工具类。一、常用方法介绍newFixedThreadPoolnewFixedThreadPool方法有两种函数签名: public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorSe转载 2017-01-11 10:40:40 · 218 阅读 · 0 评论 -
多线程创建的三种方式
方式一:创建Thread的子类1、创建Thread子类的一个实例并重写run方法,run方法会在调用start()方法之后被执行,创建并运行上述Thread子类 class MyThread extends Thread { public void run(){ System.out.println("MyThread1 running"); } }pub转载 2017-01-11 03:05:38 · 285 阅读 · 0 评论 -
秒杀多线程第一篇 多线程笔试面试题汇总
系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性。系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”。有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题。 ---------转载 2017-01-13 15:12:39 · 194 阅读 · 0 评论 -
Java多线程
一、多线程1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间,同时共享进转载 2017-01-13 16:21:27 · 441 阅读 · 0 评论 -
50道Java线程面试题
下面是Java线程相关的热门面试题,你可以用它来好好准备面试。1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。欲了解转载 2017-01-13 16:24:50 · 202 阅读 · 0 评论 -
大数据中的信号量机制的应用
信号量机制:针对用户量比较多,处理能力有限应用一:class Keng //坑位--资源{ final Semaphore sp=new Semaphore(10,true);//信号量,3个新号 10个信号量 坑(资源)最多有10个 void getitem() throws InterruptedException //获取资源 {原创 2017-01-09 23:50:22 · 337 阅读 · 0 评论 -
大数据处理中锁的应用
1、情景一:一个线程等待一个线程 public static void main(String[] args) throws InterruptedException { final ReentrantLock reentranlock=new ReentrantLock ();//锁定 final Condition conditio原创 2017-01-10 00:04:12 · 337 阅读 · 0 评论 -
加锁情况下生产者消费者的应用
最近重新认识了锁,分享几篇文章class Buffer{ final Lock lock=new ReentrantLock();//定义一个锁 final Condition notFull =lock.newCondition();//信号,没有满,可以塞入 条件等待 final Condition notEmtpy =lock.newCondition();/转载 2017-01-10 00:12:29 · 180 阅读 · 0 评论 -
阻塞队列
本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间才会被唤醒继续操作. 使用BlockingQueue的关键原创 2017-01-10 00:55:08 · 198 阅读 · 0 评论 -
多线程创建的三种方式
方式一:创建Thread的子类1、创建Thread子类的一个实例并重写run方法,run方法会在调用start()方法之后被执行,创建并运行上述Thread子类class Mythread extends Thread{ public void run(){ System.out.println(Thread.currentThread().getId()+"原创 2017-02-05 17:57:13 · 490 阅读 · 0 评论 -
多线程中join工作原理
join用于让当前执行线程等待join线程执行结束。其实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远wait,代码片段如下,wait(0)表示永远等待下去。while(isAlive()){ wait(0);}直到join线程中止后,线程的this.notifyAll会被调用,调用notifyAll是在JVM里实现的,所以JDK里看不到,有兴趣的原创 2017-01-10 17:25:09 · 1023 阅读 · 0 评论 -
java多线程concurrent包
编写多线程的程序一直都是一件比较麻烦的事情,要考虑很多事情,处理不好还会出很多意想不到的麻烦。加上现在很多开发者接触到的项目都是打着企业级旗号的B/S项目,大多数人都很少涉及多线程,这又为本文的主角增加了一份神秘感。 讲到Java多线程,大多数人脑海中跳出来的是Thread、Runnable、synchronized……这些是最基本的东西,虽然已经足够强大,但想要用好还真不容易。从JDK转载 2017-01-15 03:21:01 · 463 阅读 · 0 评论 -
java中的多线程
1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间,同时共享进进程锁拥有的内转载 2017-01-10 18:05:50 · 251 阅读 · 0 评论 -
CyclicBarrier、CountDownLatch、Phaser
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。 CyclicBarrier类似于CountDownLatch也是转载 2017-01-10 16:39:45 · 432 阅读 · 0 评论 -
Java 多线程常见面试问题
什么是原子操作? Java Concurrency API中有哪些原子操作类?原子操作是执行单个任务单元的操作,这个操作不需要干扰其他操作,可以理解为当前情况下不可再分的操作,远在操作是多线程环境下避免数据不一致而存在的必需品。int++就不是原子操作,如果一个线程读取它的值并行+1操作,而另外一个线程读取了旧的值,则会导致错误的结果。为了解决这个问题,我们需要确保递增操作是原子的,可转载 2017-01-11 09:35:03 · 586 阅读 · 0 评论 -
40个Java多线程问题总结
1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓”知其然知其所以然”,”会用”只是”知其然”,”为什么用”才是”知其所以然”,只有达到”知其然知其所以然”的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少转载 2017-04-16 19:18:05 · 200 阅读 · 0 评论