线程
persistenceヾ(◍°∇°◍)ノ
功不成,名不就,何以游戏人生! 努力到无能为力,拼搏到感动自己,路漫漫其修远兮,吾将上下而求索..
展开
-
java 注意线程下的 异常捕获,sleep(10000)休眠,可能会出现死循环
https://blog.csdn.net/persistencegoing/article/details/84376427 线程 (1)在catch(){} 中的语句要保证不会出现异常,或者catch中的语句再次捕获了异常, ( 2 ) 线程中try中的语句出现异常,会直接跳过try中的sleep,导致不停地循环 (3)线程的while循环中如果不适用try cat...原创 2018-12-26 16:28:40 · 2408 阅读 · 0 评论 -
Java线程(十三):Condition-线程通信更高效的方式
https://blog.csdn.net/persistencegoing/article/details/84376427 使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象...转载 2019-03-11 14:04:39 · 83 阅读 · 0 评论 -
Java线程(十二):线程本地变量ThreadLocal
https://blog.csdn.net/persistencegoing/article/details/84376427 首先说明ThreadLocal存放的值是线程内共享的,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递,这样处理后,能够优雅的解决一些实际问题,比如Hibernate中的OpenSessionInView,就是使用ThreadLocal保存Session对象...转载 2019-03-11 14:00:54 · 151 阅读 · 0 评论 -
Java线程(十一):阻塞队列BlockingQueue
https://blog.csdn.net/persistencegoing/article/details/84376427 改进公司的调度器,调度器调度线程池执行任务,生产者生产任务,消费者消费任务,那么这时就需要一个任务队列,生产者向队列里插入任务,消费者从队列里提取任务执行,调度器里是通过BlockingQueue实现的队列,随后小查一下,下面看看BlockingQueue...转载 2019-03-11 13:49:55 · 101 阅读 · 0 评论 -
Java线程(十):锁对象Lock-同步问题更完美的处理方式
https://blog.csdn.net/persistencegoing/article/details/84376427 Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我们拿Java线程(二)中的一个例子简单的实现一下和sychro...转载 2019-03-11 13:46:20 · 207 阅读 · 0 评论 -
Java线程(九):线程池
https://blog.csdn.net/persistencegoing/article/details/84376427 自JDK5之后,Java推出了一个并发包,java.util.concurrent,在Java开发中,我们接触到了好多池的技术,String类的对象池、Integer的共享池、连接数据库的连接池、Struts1.3的对象池等等,池的最终目的都是节约资源,以更小的开销做...转载 2019-03-11 10:35:05 · 73 阅读 · 0 评论 -
Java线程(七):Timer和TimerTask
https://blog.csdn.net/persistencegoing/article/details/84376427 Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。 Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以...转载 2019-03-11 10:22:47 · 237 阅读 · 0 评论 -
Java线程(六):Java Thread.yield详解
一. Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。 Java线程中有一个Thread.yield( )方法,很多人翻译成线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CP...转载 2019-03-05 16:56:44 · 231 阅读 · 0 评论 -
Java线程(五):线程中断、线程让步、线程睡眠、线程合并
本文是做为传统线程知识点的一个补充。有人会问:JDK5之后有了更完善的处理多线程问题的类(并发包),我们还需要去了解传统线程吗?答:需要。在实际开发中,无外乎两种情况,一个是开发新内容,另一个是维护原有程序。开发新内容可以使用新的技术手段,但是我们不能保证原有程序是用什么实现的,所以我们需要了解原有的。另外一点,了解传统线程的工作原理,使我们在使用并发包时更加得心应手。 线程中断 ...转载 2019-02-25 20:30:40 · 177 阅读 · 0 评论 -
Java线程(四):线程协作-生产者/消费者问题
上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者问题是一个经典的线程同步以及通信的案例。该问题描述了两个共享固定大小缓冲区的线程,即所谓的“生产者”和“消费者”在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加...转载 2019-02-25 19:56:39 · 165 阅读 · 0 评论 -
Java线程(三): volatile和synchronized的作用和区别
java的线程抽象内存模型 java的线程抽象内存模型中定义了每个线程都有一份自己的私有内存,里面存放自己私有的数据,其他线程不能直接访问,而一些共享数据则存在主内存中,供所有线程进行访问。 上图中,如果线程A和线程B要进行通信,就要经过主内存,比如线程B要获取线程A修改后的共享变量的值,要经过下面两步: (1)、线程A修改自己的共享变量副本,并刷新到了主内存中。 (...原创 2019-02-22 20:46:11 · 909 阅读 · 0 评论 -
Java线程(二):线程同步synchronized和volatile
上篇通过一个简单的例子说明了线程安全与不安全,在例子中不安全的情况下输出的结果恰好是逐个递增的(其实是巧合,多运行几次,会产生不同的输出结果),为什么会产生这样的结果呢,因为建立的Count对象是线程共享的,一个线程改变了其成员变量num值,下一个线程正巧读到了修改后的num,所以会递增输出。 要说明线程同步问题首先要说明Java线程的两个特性,可见性和有序性。多个线程之间是不...转载 2019-02-22 20:26:43 · 86 阅读 · 0 评论 -
Java线程(一):线程安全与不安全
作为一个Java web开发人员,很少也不需要去处理线程,因为服务器已经帮我们处理好了。记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT、Socket、多线程、I/O,编写的客户端和服务器,当时做出来很兴奋,回学校给同学们演示,感觉自己好NB,呵呵,扯远了。上次在百度开发者大会上看到一个提示语,自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如...转载 2019-02-22 20:07:44 · 709 阅读 · 0 评论 -
Java线程(八): Callable和Future
本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的...转载 2019-02-22 19:51:55 · 937 阅读 · 0 评论 -
Java线程(十四):线程 sleep()和wait()的区别
https://blog.csdn.net/persistencegoing/article/details/84376427 sleep用于线程控制,而wait用于线程间的通信,与wait配套的方法还有notify和notifyAll. sleep和wait的区别有: 1,这两个方法来自不同的类分别是Thread和Object 2,最主要是sleep方法没有释放锁,而wait方法释放...原创 2019-03-12 15:07:27 · 983 阅读 · 0 评论