多线程
levonmo
关注后端, Java
展开
-
线程问题<2>
面试题:写一个固定容量同步容器,拥有put和get方法,以及getCount方法能够支持2个生产者线程以及10个消费者线程的阻塞调用1.使用wait和notify/notifyAll来实现public class Test { private LinkedList list = new LinkedList(); private int MAX = 10;//最大容量原创 2017-11-09 18:43:35 · 170 阅读 · 0 评论 -
线程问题<1>
实现一个容器,提供两个方法,add,size写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束1.第一种方法是使用while一直监听容器的数量变化,个数到达5就退出缺点: list添加volatile之后,第二个线程能够接到通知,但是,线程的死循环很浪费cpupublic class Test1 { priva原创 2017-11-08 21:03:15 · 198 阅读 · 0 评论 -
ThreadLocal: 线程独享
ThreadLocal线程局部变量ThreadLocal是使用空间换时间,synchronized是使用时间换空间比如在hibernate中session就存在与ThreadLocal中,避免synchronized的使用package com.mo;public class Test6 { //所有线程共享 static volatile Person p =原创 2017-11-09 18:50:32 · 270 阅读 · 0 评论 -
线程安全的单列模式(4种)
1.不使用同步锁public class Singleton { private static Singleton s = new Singleton();//直接初始化一个实例对象 private Singleton() {///private类型的构造函数,保证其他类对象不能直接new一个该对象的实例 System.out.println("Singleton"); }原创 2017-11-09 21:10:39 · 360 阅读 · 0 评论 -
线程问题<3>
有N张火车票,每张票都有一个编号,同时有10个窗口对外售票,请写一个模拟程序1.使用锁缺点: 效率不高public class Test7 { private LinkedList list = new LinkedList(); public static void main(String[] args) { final Test7 t = new Test7();原创 2017-11-09 21:59:49 · 139 阅读 · 0 评论 -
并发容器
总结:1.并发容器 : --并发性不是特别高时候使用这两个HashtableCollections.sychronizedXXX //传人一个容器,返回一个加锁的容器--并发性要求比较高使用ConcurrentHashMap //当容器不需要排序ConcurrentSkipListMap //高并发并且排序Hashtable比Concurren原创 2017-11-10 00:53:26 · 233 阅读 · 0 评论 -
阻塞式并发队列
--BlockingQueue: 阻塞式队列--可以实现生产者消费者模式 --LinkedBQ: 无限队列--ArrayBQ: 有限队列--DelayQueue: 执行定时任务,可以设置多长时间被消费者拿走--LinkedTransferQueue: 应用情形:消费者先启动,生产者生产一个东西的时候(调用transfer方法)不往队列里面放,而是查看有没有消费者,如果有消费者原创 2017-11-10 00:42:34 · 263 阅读 · 0 评论 -
java的基本类型一定存放在栈中吗?
基本数据类型存放在哪?基本类型的变量存在栈里或者堆里不是由"大小可知,生存期可知"就能确定了。关键是上下文。比如void func(){int a = 3;}这自然是存在栈里的。局部方法嘛。而class Test{int a = 3;}这就肯定是随对象放到堆里的。因此,不要孤立的看到基本类型就说放到栈里,看到引用类型就说放到堆里。区分引用变量和对象本原创 2017-11-11 09:04:35 · 5460 阅读 · 5 评论 -
java线程池
首先来认识几个关键字Executor是一个接口,需要实现其中的execute(Runnable command)方法,需要将一个实现Runnable接口的类传进去可以实现一个类继承runable方法,在execute()方法中重新new Thread(Runnable runable)放进去然后调用.start()方法package com.mo;/** * E原创 2017-11-12 17:13:51 · 298 阅读 · 0 评论