java核心知识学习
lwj0310
这个作者很懒,什么都没留下…
展开
-
创建线程的第三种方式Callable和Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的.Callabel接口可以看成是Runnable接口的增强版,只不过其线程执行体call()方法比run方法更加强大罢了:>>call()方法中可以有返回值>>call()方法中可以声明抛转载 2014-04-25 11:10:59 · 608 阅读 · 0 评论 -
线程中如何创建锁和使用锁 Lock,设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁?Lock lock = new ReentrantLock();2.如何使用锁?可以参看Lock文档,其使用格式如下:class X { private final ReentrantLock lock = new转载 2014-04-25 11:05:20 · 836 阅读 · 0 评论 -
equals和==的比较、单例模式,饿汉式,饱汉式
最近发现自己学习能力变慢了,想来想去还是发现是因为自己Java基础没有打扎实,接下来的一系列文章将主要记录自己对于Java的最基础知识点的学习.一.equals和==的比较 先看例子:package com.amos;/** * @ClassName: EqualTest * @Description:Java中的equal和==的比较 * @author: a转载 2014-04-25 11:46:48 · 663 阅读 · 0 评论 -
重点学习线程池ThreadPool
线程池是多线程学习中需要重点掌握的.系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互.在这种情形下,使用线程池可以很好的提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池.一.如何创建线程池??在Java5之前,线程池都是开发才手动实现的,从Java5开始,Java内建支持线程池.主要是新增了一个executors工厂类来生产线程池.转载 2014-04-25 11:15:53 · 602 阅读 · 0 评论 -
多线程并发之线程同步
1.什么是线程同步? 多线程编程是很有趣的事情,它很容易出现"错误情况",这种情况不是由编码造成的,它是由系统的线程调度造成的,当使用多个线程来访问同一个数据时,很容易出现"偶然情况",出现线程安全问题.线程安全问题最常见的就是银行取钱问题,铁路售票问题,必须保证甲方在操作数据时候,己方不会影响甲方.类似于公共厕所,一个人占一个坑.2.下面的例子,将说明为什么要保证线程安全转载 2014-04-25 11:37:15 · 536 阅读 · 0 评论 -
线程同步工具类,CyclicBarrier学习
线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发.1.效果如下: 2.实现代码:package com.amos.concurrent;import java.util.Random;import jav转载 2014-04-25 11:02:37 · 444 阅读 · 0 评论 -
并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器
多线程并发就像是内功,框架都像是外功,内功不足,外功也难得精要.1.进程和线程的区别一个程序至少有一个进程,一个进程至少有一个线程.用工厂来比喻就是,一个工厂可以生产不同种类的产品,操作系统就是工厂,产品就是进程,工人就是线程.工厂----->操作系统产品----->进程工人---->线程一个工厂可以同时生产不同的产品,即多个产品可以同时进行转载 2014-04-25 11:41:54 · 1026 阅读 · 0 评论 -
使用Condition控制线程通信
一.需求实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次.即:A->B->C---A->B->C---A->B->C二.实现1.分析在前面文章java核心知识点学习----多线程并发之线程间的通信,notify,wait,曾实现过需求两个线程间隔循环的例子.涉及到3个线程就使用之间的方法就有点麻烦了转载 2014-04-25 11:03:57 · 469 阅读 · 0 评论 -
多线程并发之线程间的通信,notify,wait
1.需求:子线程循环10次,主线程循环100次,这样间隔循环50次.2.实现:package com.amos.concurrent;/** * @ClassName: ThreadSynchronizedConnect * @Description: 用wait,notify实现线程间的通信,需求:子线程循环10次,主线程循环100次,这样间隔循环50次.转载 2014-04-25 11:33:13 · 572 阅读 · 0 评论 -
多线程间的数据共享的几种实现方式比较
需求:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j减少1.实现数据共享的几种方式比较:1.使用同一个runnable对象如果每个线程执行的代码相同,那么可以使用同一个runnable对象,这个runnable有那个共享数据,例如,卖票系统就是这么做的.如下例所示:... public static void main(String[转载 2014-04-25 11:28:40 · 6483 阅读 · 0 评论 -
多线程间的数据共享和对象独立,ThreadLocal详解
线程内的数据共享与对象独立,举例:张三给李四转钱,开启A线程去执行转钱这个动作,刚好同时王五给赵六转钱,开启B线程去执行转钱,因为是调用的同样一个动作或者说对象,所以如果不能保证线程间的对象独立,那么很有可能发生,张三给李四转钱时把王五转给赵六的转钱一块提交了,而王五转钱整个动作还未完成,那么就造成了转钱错误, 所以线程间一方面要保证数据的共享,另一方面要保证对象的对立.1.用Map封装对转载 2014-04-25 11:21:15 · 732 阅读 · 0 评论