文章分类 -  java-多线程

摘要:核心处理方法 阅读全文
posted @ 2018-11-05 15:39 十月围城小童鞋 阅读(3333) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal是什么 ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。 从数据结构入手 下图为ThreadLocal的内 阅读全文
posted @ 2018-09-25 16:53 十月围城小童鞋 阅读(161) 评论(0) 推荐(0) 编辑
摘要:有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。 使用线程池主要为了解决一下几个问题: 通过重用线程池中的线程,来减少每个线程创 阅读全文
posted @ 2018-09-07 11:50 十月围城小童鞋 阅读(167) 评论(0) 推荐(0) 编辑
摘要:CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。 如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果。为此你可以将每个任务的Future保存进一个集合,然后循环这个集合调用Futur 阅读全文
posted @ 2018-09-07 10:13 十月围城小童鞋 阅读(234) 评论(0) 推荐(0) 编辑
摘要:在前面一篇名为条件阻塞Condition的应用的博客中提到了一个拔高的例子:利用Condition来实现阻塞队列。其实在java中,有个叫ArrayBlockingQueue<E>的类提供了阻塞队列的功能,所以我们如果需要使用阻塞队列,完全没有必要自己去写。 ArrayBlockingQueue<E 阅读全文
posted @ 2018-03-15 10:12 十月围城小童鞋 阅读(165) 评论(0) 推荐(0) 编辑
摘要:Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。今天我们就通过实例来学习一下Exchanger的用法。 Exchanger的简单实例 Exchanger是在两个任务之间交换对象的栅栏,当这些任务进入栅栏时,它们各自拥有一个对象。当他们离开时,它们都拥有之 阅读全文
posted @ 2018-03-14 16:32 十月围城小童鞋 阅读(236) 评论(0) 推荐(0) 编辑
摘要:最近在看pthread方面的书,看到条件变量一节的时候,回忆了下java中条件变量的使用方式。 java中条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化是通过一个Lock对象上调用newCondition()方法来获取的,这样,条件就和 阅读全文
posted @ 2018-03-14 11:20 十月围城小童鞋 阅读(431) 评论(0) 推荐(0) 编辑
摘要:本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Fut 阅读全文
posted @ 2018-03-13 14:39 十月围城小童鞋 阅读(117) 评论(0) 推荐(0) 编辑
摘要:一、ExecutorService介绍 ExecutorService是Java中对线程池定义的一个接口,它java.util.concurrent包中,在这个接口中定义了和后台任务执行相关的方法: Java API对ExecutorService接口的实现有两个,所以这两个即是Java线程池具体实 阅读全文
posted @ 2017-12-15 16:16 十月围城小童鞋 阅读(464) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws  阅读全文
posted @ 2017-08-08 16:46 十月围城小童鞋 阅读(120) 评论(0) 推荐(0) 编辑
摘要:CyclicBarrier 类有一个整数初始值,此值表示将在同一点同步的线程数量。当其中一个线程到达确定点,它会调用await() 方法来等待其他线程。当线程调用这个方法,CyclicBarrier阻塞线程进入休眠直到其他线程到达。当最后一个线程调用CyclicBarrier 类的await() 方 阅读全文
posted @ 2017-08-02 22:13 十月围城小童鞋 阅读(120) 评论(0) 推荐(0) 编辑
摘要:当一个线程想要访问某个共享资源,首先,它必须获得semaphore。如果semaphore的内部计数器的值大于0,那么semaphore减少计数器的值并允许访问共享的资源。计数器的值大于0表示,有可以自由使用的资源,所以线程可以访问并使用它们。 可修改Semaphores的公平性,在默认的情况下信号 阅读全文
posted @ 2017-08-01 21:54 十月围城小童鞋 阅读(202) 评论(0) 推荐(0) 编辑
摘要:读写锁,分为读锁和写锁,多个读锁不互斥,读锁和写锁互斥,写锁与写锁互斥,这是JVM自己控制的,你只要上好相应的锁即可,如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁.总之,读的时候上读锁,写的时候上写锁! 看如下程 阅读全文
posted @ 2017-08-01 21:12 十月围城小童鞋 阅读(220) 评论(0) 推荐(0) 编辑
摘要:Java提供另外的机制用来同步代码块。它比synchronized关键字更加强大、灵活。Lock 接口比synchronized关键字提供更多额外的功能。在使用Lock时需要注意的是要释放Lock锁。 阅读全文
posted @ 2017-08-01 17:38 十月围城小童鞋 阅读(408) 评论(0) 推荐(0) 编辑
摘要:其实很简单,大家看代码就知道是神马意思了。 这是对生产者和消费者问题的一种简单解决 阅读全文
posted @ 2017-08-01 16:58 十月围城小童鞋 阅读(146) 评论(0) 推荐(0) 编辑
摘要:本文是学习网络上的文章时的总结,感谢大家无私的分享。 当你使用synchronized关键字来保护代码块时,你必须通过一个对象的引用作为参数。通常,你将会使用this关键字来引用执行该方法的对象,但是你也可以使用其他对象引用。通常情况下,这些对象被创建只有这个目的。比如,你在一个类中有被多个线程共享 阅读全文
posted @ 2017-08-01 16:46 十月围城小童鞋 阅读(188) 评论(0) 推荐(0) 编辑
摘要:每个方法声明为synchronized关键字是一个临界区,Java只允许一个对象执行其中的一个临界区。 静态方法有不同的行为。只有一个执行线程访问被synchronized关键字声明的静态方法,但另一个线程可以访问该类的一个对象中的其他非静态的方法。 你必须非常小心这一点,因为两个线程可以访问两个不 阅读全文
posted @ 2017-07-28 10:27 十月围城小童鞋 阅读(124) 评论(0) 推荐(0) 编辑
摘要:1、工厂模式是最有用的设计模式。它是一个创造模式,还有他的目的是创建一个 或者几个类对象的对象。有了这个工厂,我们有这些优势集中创建对象: 更简单的改变了类的对象创建或者说创建这些对象的方式; 更简单的为了限制的资源限制了对象的创建。 更简单的生成创建对象的统计数据。 2、Java提供一个接口,Th 阅读全文
posted @ 2017-07-27 17:31 十月围城小童鞋 阅读(849) 评论(0) 推荐(0) 编辑
摘要:1.什么是ThreadLocal 根据JDK文档中的解释:ThreadLocal的作用是提供线程内的局部变量,这种变量在多线程环境下访问时能够保证各个线程里变量的独立性。 从这里可以看出,引入ThreadLocal的初衷是为了提供线程内的局部变量,而不是为了解决共享对象的多线程访问问题。实际上,Th 阅读全文
posted @ 2017-07-27 14:34 十月围城小童鞋 阅读(195) 评论(0) 推荐(0) 编辑
摘要:1、Java里有2种异常: 检查异常:这些异常必须强制捕获她们或在一个方法里的throws子句中。 未检查异常:这些异常不用强制捕获它们。 2、在一个线程对象的run()方法里抛出一个检查异常,我们必须捕获并处理她们。因为run()方法不接受throws子句。当一个非检查异常抛出,默认的的行为是在控 阅读全文
posted @ 2017-07-27 11:33 十月围城小童鞋 阅读(105) 评论(0) 推荐(0) 编辑

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