`
不平凡的人
  • 浏览: 35432 次
  • 性别: Icon_minigender_1
  • 来自: 嘉峪关
社区版块
存档分类
最新评论
文章列表
1、生产者消费者模型       经典的多线程模型;       通常有两类线程:若干生产者线程,若干消费者线程;       生产者线程:提交用户请求;       消费者线程:处理生产者提交的任务,在生产和消费之间通过共享内存缓存区进行数据通信;   2、流程图     3、代码示例 (1)生产者 package net.oschina.tkj.mulitcoding.providerconsumermodel; import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; ...
1、Master-worker模式:       常用的并行计算模式。       核心思想为:系统中有两个进程协同工作:Master进程,worker进程。       Master:负责接收与分配任务,当worker(线程任务)执行完毕后,将返回的结果告知Master,Master对接收的任务进行汇总处理。       Worker:为一个线程任务对象,处理Master分配的任务,并将任务保存,用于Master后续的处理。   2、流程图:   3、Master,worker实现说明 (1)Master中使用到的容器   ConcurrentLinkedQueue:用户 ...
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模式概述        Future类似于商品订单问题,当用户看上一件商品之后,下单完成在家里等待送货上门即可。更形象的一个例子就是页面发送AJAX请求,页面异步进行后台处理,用户无需一直等待结果,可以浏览其他东西。   Future的原理是:当你申请资源(计算资源或I/O资源)时,立即返回一个虚拟的资源句柄,当真正使用的时候,再将虚拟的句柄转化成真正的资源,相当于预获取。   二、Future序列图
关于volitale,notify,wait面试问题:   1、问题:两个线程操作一个对象时,使得其中的一个线程不要一直死循环等待另外一个线程       解决思路:上述情况如果不添加volatile关键字就会是一个线程一直循环等待    (1)代码示例: package net.oschina.tkj.mulitcoding.notifykey; import java.util.ArrayList; import java.util.List; /** * notify,wait wait:使得线程处于等待状态,并且释放线程的锁 notify:唤醒一个线程,但 ...
今天去一家公司面试,机试做了一道关于字符串的题,做的不是很理想,下来又研究了一下:   题目要求: 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与线程的内容:   一、线程实现 二、Java线程调度 三、状态转化   一、线程实现         线程是比进程轻量级的调度执行单位,线程引入,可以把进程的资源分配与调度分开,各个线程可以共享资源又 ...

volatile关键字

简单介绍一下volatile关键字   1、Java语言规范对volatile的定义如下:      volatile关键字为Java虚拟机提供的最轻量级的同步机制。      Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。      通俗点讲:就是说一个变量如果用volatile修饰了,则Java可以确保所有线程看到这个变量的值是一致的,如果某个线程对volatile修饰的共享变量进行更新,那么其他线程可以立马看到这个更新,这就是所谓的线程可见性。 2、原子性,可见性,有序性       JMM围绕 ...
本文简单介绍一下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内存区域 一、运行时数据区域   一、运行时数据区域   1、线程与JVM线程 1.1、线程        此处所说的线程指程序执行过程中的一个线程实体。        JVM 允许一个应用并发执行多个线程。Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上。当原生线程初始化完毕,就会调用 Java 线程的 run() 方法。 ...

Java注解

本文从以下几点浅谈一下Java注解 一、注解的定义 二、自定义注解示例 三、元注解 四、注解元素   一、注解的定义   1、元数据       元数据是用于描述数据的数据,通俗讲,就是描述代码之间的关系,或者是代码与其他外部资源(如:数据库表)之间的内在联系的数据。 2、注解的定义      Java5引入注解,注解也被成为元数据,在代码中添加信息提供了一种形式化的方法,使我们可以在稍后的某个时刻非常方便的使用这些数据。 3、注解的引入       使用Annotation之前,XML被广泛的应用于描述元数据。不知何时开始一些应用开发人员和架构师发现XML的维护越 ...
Global site tag (gtag.js) - Google Analytics