- 浏览: 35432 次
- 性别:
- 来自: 嘉峪关
最新评论
-
NonkeyJiang:
看了大神的作品,收获很大,希望能继续奉献高质量的博文
java内存区域(二) -
NonkeyJiang:
写的很不错啊,看了好多遍,终于有点收获
代理模式 -
刘凯宁:
分型的一些东西
文章列表
1、生产者消费者模型
经典的多线程模型;
通常有两类线程:若干生产者线程,若干消费者线程;
生产者线程:提交用户请求;
消费者线程:处理生产者提交的任务,在生产和消费之间通过共享内存缓存区进行数据通信;
2、流程图
3、代码示例
(1)生产者
package net.oschina.tkj.mulitcoding.providerconsumermodel;
import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
...
Master-worker模式
- 博客分类:
- 设计模式
1、Master-worker模式:
常用的并行计算模式。
核心思想为:系统中有两个进程协同工作:Master进程,worker进程。
Master:负责接收与分配任务,当worker(线程任务)执行完毕后,将返回的结果告知Master,Master对接收的任务进行汇总处理。
Worker:为一个线程任务对象,处理Master分配的任务,并将任务保存,用于Master后续的处理。
2、流程图:
3、Master,worker实现说明
(1)Master中使用到的容器
ConcurrentLinkedQueue:用户 ...
DelayQueue延迟阻塞队列
- 博客分类:
- java基础
1、DelayQueue:
带有延迟时间的Queue,其中的元素只有当其指定了延迟时间到了,才能够从队列中获取元素。DelayQueue中的元素必须实现Delay接口,DelayQueue是一个没有大小限制的队列,应用场景很多,比如对缓存超时的数据进行移除、任务超时处理、空闲连接关闭等。
2、示例如下:
package net.oschina.tkj.mulitcoding.blockqueue.delayqueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUn ...
一、Future模式概述
二、Future序列图
三、示例代码
一、Future模式概述
Future类似于商品订单问题,当用户看上一件商品之后,下单完成在家里等待送货上门即可。更形象的一个例子就是页面发送AJAX请求,页面异步进行后台处理,用户无需一直等待结果,可以浏览其他东西。
Future的原理是:当你申请资源(计算资源或I/O资源)时,立即返回一个虚拟的资源句柄,当真正使用的时候,再将虚拟的句柄转化成真正的资源,相当于预获取。
二、Future序列图
关于线程通信问题(面试题)
- 博客分类:
- java基础
关于volitale,notify,wait面试问题:
1、问题:两个线程操作一个对象时,使得其中的一个线程不要一直死循环等待另外一个线程
解决思路:上述情况如果不添加volatile关键字就会是一个线程一直循环等待
(1)代码示例:
package net.oschina.tkj.mulitcoding.notifykey;
import java.util.ArrayList;
import java.util.List;
/**
* notify,wait wait:使得线程处于等待状态,并且释放线程的锁 notify:唤醒一个线程,但 ...
字符串排序显示问题(面试题)
- 博客分类:
- java基础
今天去一家公司面试,机试做了一道关于字符串的题,做的不是很理想,下来又研究了一下:
题目要求:
1、给定一个字符串,只对其中的英文字符进行排序显示
2、排序显示的规则是:根据英文字符出现的次数多的在前面显示,如果出现次数相同按字典顺序显示
代码示例:
package net.oschina.tkj.teststring;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 字符串排序
* ...
本文从以下介绍线程安全与锁优化
一、线程安全
二、锁优化
一、线程安全
1、线程安全的定义
Brian Goetz对线程安全的定义:
当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度与交替执行,也不需要进行额外的同步,或者调用者也不需要做任何的其他协调操作,调用该对象的行为都可以获取到正确的结果,该对象就是线程安全的。
线程安全代码具备的特征:
代码本身封装了正确性的保障手段(如互斥同步),调用者无需关注多线程的问题,也无需实现任何措施来保证多线程的正确调用。
2、Java语言中的线程安全
...
本文从以下方面Java与线程的内容:
一、线程实现
二、Java线程调度
三、状态转化
一、线程实现
线程是比进程轻量级的调度执行单位,线程引入,可以把进程的资源分配与调度分开,各个线程可以共享资源又 ...
volatile关键字
- 博客分类:
- JVM学习
简单介绍一下volatile关键字
1、Java语言规范对volatile的定义如下:
volatile关键字为Java虚拟机提供的最轻量级的同步机制。
Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。
通俗点讲:就是说一个变量如果用volatile修饰了,则Java可以确保所有线程看到这个变量的值是一致的,如果某个线程对volatile修饰的共享变量进行更新,那么其他线程可以立马看到这个更新,这就是所谓的线程可见性。
2、原子性,可见性,有序性
JMM围绕 ...
Java内存模型(JMM)
- 博客分类:
- JVM学习
本文简单介绍一下Java内存模型
一、主内存与工作内存
二、内存间的交互操作
一、主内存与工作内存
1、Java的内存模型(Java Memory Model,JMM)
java虚拟机规范中尝试用一种Java内存模型来屏蔽掉各种硬件与操作系统的内存访问差异,以实现java程序在各种平台上都能达到一致的并发效果。
2、主内存与工作内存
1>Java内存模型主要目的
定义程序中各个变量的访问规则,即虚拟机中将变量存储到内存和从内存中取出的底层细节。
上述变量与Java程序中的变量略有区别:该变量包括实例字段,静 ...
本文从以下方面介绍类加载器:
一、类与类加载器
二、双亲委派模型
一、类与类加载器
类加载器:通过一个类的全限定名来获取该类的二进制字节流,该动作在虚拟机的外部执行,方便让应用程序自己决定获取 ...
本文从以下方法介绍类加载过程:
一、类加载时机
二、类加载过程
一、类加载时机
类从加载到虚拟机内存开始,到从虚拟机内存卸载出为止,生命周期如下:
加载(Loading)
验证(Verification)
准备(Preparation)
解析(Resolution)
初始化(Initialization)
使用(Using)
卸载(Unloading)
注意:加载,验证,准备,初始化,卸载,5个阶段的顺序是确定的。
验证、 ...
本文从以下方面描述类文件结构:
(一)class文件的结构
一、魔数与class文件版本
二、常量池
三、访问标志
四、类索引、父类索引、接口索引集合
五、字段表集合
六、方法表集合
七、属性表集合
(一)class文件的结构
1、概述
class文件是以8位字节为基本单位二进制流,各个结构严格按照顺序排列起来,中间没有任何分割符。 当遇到要占用8位字节以上的空间数据时,则会按照高位在前的方式分割成若干个字节进行存储。
2、class文件中的数据类型
Java虚拟机规范规定,Class文件的格式采用一种类似C语言的 ...
java内存区域(二)
- 博客分类:
- JVM学习
本文从以下内容介绍java内存区域
一、运行时数据区域
一、运行时数据区域
1、线程与JVM线程
1.1、线程
此处所说的线程指程序执行过程中的一个线程实体。
JVM 允许一个应用并发执行多个线程。Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上。当原生线程初始化完毕,就会调用 Java 线程的 run() 方法。 ...
本文从以下几点浅谈一下Java注解
一、注解的定义
二、自定义注解示例
三、元注解
四、注解元素
一、注解的定义
1、元数据
元数据是用于描述数据的数据,通俗讲,就是描述代码之间的关系,或者是代码与其他外部资源(如:数据库表)之间的内在联系的数据。
2、注解的定义
Java5引入注解,注解也被成为元数据,在代码中添加信息提供了一种形式化的方法,使我们可以在稍后的某个时刻非常方便的使用这些数据。
3、注解的引入
使用Annotation之前,XML被广泛的应用于描述元数据。不知何时开始一些应用开发人员和架构师发现XML的维护越 ...