【J2SE基础】
文章平均质量分 77
蓝精灵的自由宇宙
爱生活,生活爱你!
展开
-
(十四)java并发编程--线程的阻塞
1yield2join3sleep4waitjava中我们可以使用线程类的三种方式来阻止线程的执行。 线程的状态图如下(图片来自网络): 1、yield()yield英文的意思是屈服,如同其意,会让另一个线程屈服。 yield()方法可以暂停当前执行的线程,以便为相同优先级的其他等待线程提供机会, 如果没有等待线程, 或者等待线程的 优先级较低, 那么相同的线程将会执行。当获得执行机原创 2017-12-07 23:11:37 · 530 阅读 · 0 评论 -
(十六)java并发编程--线程的死锁解决方案(生产者和消费者几种实现方式)
上一篇中,主要了解了什么时候死锁,并且提出死锁的一个解决方案,多个锁要按照一定的顺序来。本片主要是利用生产者消费者模式解决线程的死锁。多线程生产者和消费者一个典型的多线程程序。一个生产者生产提供消费的东西,但是生产速度和消费速度是不同的。这就需要让生产者和消费者运行不同的线程,通过共享区域或者队列来协调他们。如下图所示: 代码如下:package deadlock.comsume原创 2017-12-08 20:37:18 · 777 阅读 · 0 评论 -
(十五)java并发编程--线程的死锁(deadlock)
线程在操作系统使用不同的资源,一般以以下方式使用这些资源。 1)请求一个资源。 2)使用这个资源。 3)释放资源。1什么是死锁2解决死锁的办法上述代码我们这么解决死锁呢1、什么是死锁?死锁的情况是,一些线程被阻塞,每个线程都拥有一个资源,并且等待另外一个进程以获取另外的一个资源。 想了想类似于生活中的哪些情形,我拥有有一本书(资源使用)叫做《java并发编程》 ,你拥有一本叫《java虚原创 2017-12-08 20:33:28 · 1095 阅读 · 0 评论 -
(八)java并发编程--java内存模型
首先是什么是java内存模型? 不同的操作系统有不同的内存模型,“内存模型”一词可以理解为在特定操作写一下,对特定的内存或者高速缓存进行读写访问的抽象过程。 不同的物理机有不同的内存模型。而java内存模型是来屏蔽掉各种不同物理机及其不同操作系统的内存访问差异,以实现java程序在各种平台下都能达到一致的访问效果。 java 内存模型解释了java虚拟机是如何与计算机内存(RAM)工作的。 下原创 2017-11-29 18:07:02 · 720 阅读 · 0 评论 -
(八 附)java并发编程--JVM之指令重排分析
引言:在Java中看似顺序的代码在JVM中,可能会出现编译器或者CPU对这些操作指令进行了重新排序;在特定情况下,指令重排将会给我们的程序带来不确定的结果.....什么是指令重排数据依赖性as-if-serial语义在多线程下的指令重排指令重排的原因分析如何防止指令重排可见性参考文献1.什么是指令重排? 在计算机执行指令的顺序在经过程序编译器编译之后形成的指转载 2017-11-29 18:10:11 · 1023 阅读 · 1 评论 -
(一)java并发编程--计算机中的进程和线程(多进程和多线程)
java多线程是比较重要的部分,但是在了解java多线程之前,先了解一下进程和线程的关系。什么是进程?我们打开windows任务管理器,可以看到计算机中的进程。如下图所示。可以看到我的计算机中的进程,大概了解到进程,进程具体定义。官方定义: A process or running process refers to a set of instructions cu原创 2017-11-16 16:21:10 · 677 阅读 · 0 评论 -
(一 附)多进程 多线程 与 cpu 、操作系统
前言 在介绍多线程时,首先分析进程、以及多道程序设计模型。进程是操作系统中最重要的抽象概念之一,使得在即使只有一个CPU的机器上,也支持(伪)并发,即将一个单独的CPU变成多个虚拟的CPU。多道程序设计 在进程执行过程中常常会因为资源请求或者IO被阻塞或中断(有的请求或者中断需要处理很长时间),此时CPU便空闲出来,众所周知,CPU是计算机中非常转载 2017-11-17 00:01:15 · 1626 阅读 · 0 评论 -
java 读取配置文件
前几天因为配置文件的事,线上的job挂掉了,使用的是spring加载配置文件方式。spring配置如下 test.properties api-test.properties DecryptPropertyPlaceholderConfigurer类如下所示。public class DecryptPropertyPlacehol原创 2016-06-30 10:06:08 · 1082 阅读 · 0 评论 -
replace与replaceAll的区别
偶人的机会,查看{ 和}的转义, 写了个小demo, 发现replace是不需要转义的, 而replaceAll是需要进行转义才能进行替换。replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);replaceAll的参数是regex,即原创 2016-03-29 17:38:55 · 753 阅读 · 0 评论 -
(九)java并发编程--java.lang.TheadLocal
java并发编程synchronized+volatile单例模式实例(安全初始化模式实例)(七)java并发编程–锁机制翻译 2017-11-30 23:22:35 · 458 阅读 · 0 评论 -
(十)java并发编程--创建和启动线程(java.lang.Thread 、java.lang.Runnable)
线程创建的几种方式.创建和启动一个线程线程的子类Runnable 接口实现方式继承还是使用Runnable通常的陷阱调用run方法替代start线程的名字ThreadcurrentThreadjava 线程例子线程声明异常和线程体的返回值CallableFuture使用创建和启动一个线程创建一个线程.Thread thread = new Thread();启动java线程.thre翻译 2017-12-01 01:22:26 · 597 阅读 · 0 评论 -
(五)java并发编程--volatile关键字
java volatile 关键字用于将java变量标记为 "被存储在主内存中"。精确的来讲,每次读取被volatile关键字修饰的变量时,都是从计算机的主内存中读取,并不是从cup缓存中读取的,并且个volatile变量都是直接写入到主存中,并不是仅仅写入cpu缓存中。事实上,从java5开始,volatile关键字不仅仅保证了从主内存中写入和读取volatile变量。从下面几个方面介绍原创 2017-11-22 20:19:50 · 1263 阅读 · 2 评论 -
(十三)java并发编程--线程中断
1自己添加线程退出标志位2调用Thread stop方法停止线程3使用interrupt方法中断线程1、自己添加线程退出标志位。如下代码所示:package thread_priority;/** * Created by fang on 2017/12/3. * */public class MyThread implements Runnable { private bool原创 2017-12-07 22:56:51 · 331 阅读 · 0 评论 -
(十二)java并发编程--线程优先级
线程的优先级并不能保证现成的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的也并不是没有机会执行。 优先级用1-10的整数表示,数值越大优先级越高,默认优先级为5。 在一个线程中开启另外一个线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。如下代码中,package thread_priority;/** * Created by fang原创 2017-12-07 22:37:23 · 447 阅读 · 0 评论 -
(七)java并发编程synchronized+volatile(安全初始化模式实例)
java并发编程synchronized+volatile单例模式实例(安全初始化模式实例)原创 2017-11-26 18:26:29 · 1281 阅读 · 0 评论 -
(十七)java并发编程--任务执行之线程池的使用
大多数并发程序围绕着”任务执行”来构造的: 任务通常是一些抽象的且离散的工作单元。通过把一个用程序的共工作分解到多个任务中,可以简化程序的组织结构, 提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的工作结构来提升并发性。1在线程中执行任务2串行执行任务1显示的为任务创建线程2 无限制创建线程的不足Executor框架1 基于Executor的web服务器2 执行策略3 线原创 2017-12-12 21:39:24 · 810 阅读 · 0 评论 -
(六)java并发编程--synchronized同步块
虽然前面文章的一些实例中已经使用synchronized关键字来实现线程的同步,但还是需要好好的理解一下。 [TOC]java synchronized 关键字 synchronized实例方法synchronized静态方法实例方法中的同步块静态方法中的同步块java synchronized 实例(安全初始化模式实例)java并发应用程序原创 2017-11-24 01:30:40 · 1971 阅读 · 0 评论 -
(十一)java并发编程--java.util.concurrent.Callable
本篇文章用到了java并发包中的这几个接口和类 java.util.concurrent.Callable java.util.concurrent.FutureTask java.util.concurrent.Future java.util.concurrent.Executor1.使用Callable + FutureTask方式,代码如下所示。原创 2017-12-02 22:47:38 · 1152 阅读 · 0 评论 -
(三) java并发编程--线程的安全性
(1)什么是线程安全?当一个类被多个线程访问的时,这个类始终能表现出正确的行为,那么就称这个类是线程安全的。 (2)什么是有状态对象,什么是无状态对象呢?无状态对象一定是线程安全的。有状态对象,就是有数据存储功能的对象。有状态对象,就是有示例变量的对象,可以保存数据,是非线程安全的。无状态对象,就是不能保存数据。就是没有成员变量的对象,不能保存数据,是线程安全的。原创 2017-11-19 00:31:54 · 734 阅读 · 2 评论 -
(四) java并发编程--线程安全和资源共享
代码可以被多个线程安全的调用,我们就称线程是安全的。如果一段代码是线程安全的,他就不包含任何竞争条件。只有当多个线程更新和共享资源的时候才会出现竞争条件。因此了解java多线程在执行时,哪些资源是共享非常重要,我们来按照java变量类型来意义说明。原创 2017-11-21 17:24:14 · 570 阅读 · 0 评论 -
(二)由浅入深java集合--Hashtable
什么时候使用Hashtable? Hashtable是线程安全的,如果有多个线程访问相同的实例的可能时,可以选择使用Hashtable,反之,如果非线程安全的数据结构能带来更好的性能,HashMap更加灵活一些。Hashtable的使用代码见:Hashtable数据结构? Hashtable的数据结构和HashMap的原创 2016-01-29 10:33:48 · 1393 阅读 · 1 评论 -
(一)由浅入深java集合--HashMap原理
由浅入深hashmap HashMap所在java集合的位置如下图所示1 、大致介绍一下java的集合体系结构 List Set Map是这个集合体系中最主要的三个接口。 List、Set继承自Collection接口。 Set不允许元素重复。HashS原创 2016-01-29 10:33:02 · 1259 阅读 · 0 评论 -
文件过滤器FileFilter
场景: 今天给同事调试动态扫描文件夹中的所有文件,并且判断文件名称中包含有下划线的文件, 再把加有下划线的文件删除。针对这样的需求,开始写代码调试,在调试过程中怎么也找不到包含下划线的文件(实际上存在),最后分步调试发现了问题的所在,原来实现了FileFilter接口,但是没有修改文件过滤器的规则。问题的解决: 于是更改过滤规则,列出指定关键字的目录和文件。在接口FileFilter 的accept()方法中设定规则,最终解决了问题。小demo的代码如下所示:原创 2014-11-25 18:22:27 · 1822 阅读 · 1 评论 -
java基础--对象转型和多态
对象转型(casting): 1、一个基类的引用类型变量可以是指向子类的对象。 2、一个基类引用不能访问子类对象新增加的成员(属性和方法)。 3、可以使用引用变量instaceof来判断该引用类型变量所“指向”的对象是否属于该类,或者该类的子类。 4、 子类对象可以作为基类对象使用,称为(upcasting原创 2013-03-30 22:33:52 · 1662 阅读 · 5 评论 -
java基础--构造函数与内存分析(三)
其实有了开篇内存分析的第一个图,面向对象内存分析都一览无余了。也还是有必要详细的说明一下的。 首先说到构造函数,虽然写过很多代码,也用过构造函数,但是还是有几点需要注意的: 1、构造函数是定义在java中用来初始化对象的一个函数。 2、构造函数与类名完全相同(大小写注意),没有返回值。原创 2013-03-30 09:22:37 · 2160 阅读 · 0 评论 -
java基础--内存分析(四)(面向对象其他概念)
本次说说继承,方法的重载,方法的重写,this关键字,static关键字,super关键字,子类中的构造方法与内存分析。 继承: java与C++不同,java是单继承机制,一个子类只能继承一个父类,这样减少了很多不必要的麻烦,试想如果继承多个父类的话,每个父类有相同的方法,或者属性,情况就复杂了。所以java规定单继承机制,但一个父类可以派生多个子类。原创 2013-03-30 11:04:33 · 1745 阅读 · 0 评论 -
java基础--java内存分析(二)(类和对象与内存分析)
java中除了基础类型外的变量类型,全部都是引用类型,与C和C++的指针类似。 在内存中区别类和对象: 类似静态的概念,首先放在在代码区,声明的局部变量放在堆栈中。 对象动态概念,放入堆内存。 为什么new出来的东西放到堆内存? 而对象是new出来的东西,是原创 2013-03-30 09:08:30 · 1663 阅读 · 0 评论 -
java基础--JDK安装和配置
jdk下载在sun公司的网站很容易就下载下来,安装完毕之后我们就可以开始第一个java程序了。java的运行环境不像.net一样有一个virtual studio这样的一个可视化良好的工作室,而是在命令窗口自己敲命令来运行。 1、首先建立一个扩展名为.java 的文件,编写第一个程序。 2、在命令窗口中找到自己的这个.jav原创 2013-03-28 22:23:40 · 1226 阅读 · 2 评论 -
java基础--java内存分析(一)
在运行java程序时内存管理示意图: 1、把代码装载在内存中。 2、操作系统会找到你的代码的main() 方法,开始执行。 3、内存管理,执行过程中的内存分为四部分,heap(堆new出来的东西 部分成员变量),stack(堆原创 2013-03-28 22:35:05 · 2116 阅读 · 2 评论 -
java基础--java开始篇
java语言发展史和历史的地位: 第一代语言:打孔机--纯机器语言。 第二代语言:汇编。 第三代语言:C、pascal、Fortan面向过程语言,C++面向过程/面向对象语言,java跨平台的纯面向对象语言,.NET跨语言平台。 语言是朝着程序员更加能理解的方向发展,变得更加的高级。原创 2013-03-28 22:02:43 · 1794 阅读 · 3 评论 -
java基础--java Application开始
java文件扩展名: java文件是以“java”为扩展名,源文件的基本组成部分是类(class)。java要求: 一个源文件中最多只能有一个public类。其他类的个数不限,并且文件必须按照该类名命名。java入口: java应用程序执行入口的是main()方法,固定的书写格式原创 2013-03-28 22:12:32 · 1656 阅读 · 2 评论 -
java自动打包解包和泛型
在合适的时机自动打包、解包: 打包:自动将基本类型转换为对象。 解包:自动将对象转换为基础类型。如:打包: Map m1 = new HashMap(); M1.put("one",1); 解包: (Integer)m1.get("two"); 泛型: 出现了一原创 2013-04-16 17:33:09 · 1698 阅读 · 0 评论 -
java数组与内存分析
如果数组中的数据是基础类型的数据: int[] s = new int(5); 数组中的数据是引用类型的数据:Date[] days = new Date(3);原创 2013-04-16 17:22:20 · 1188 阅读 · 1 评论 -
Java IO流(一)基础知识
<!--@font-face {font-family:宋体}@font-face {font-family:宋体}@font-face {font-family:Calibri}@font-face {font-family:"\@宋体"}p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; mar原创 2013-04-17 07:16:24 · 1605 阅读 · 0 评论 -
java XML转JSON格式
代码如下所示import java.io.ByteArrayInputStream;import java.io.File;import java.io.InputStream;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map翻译 2014-05-20 20:55:07 · 55589 阅读 · 10 评论 -
java容器
<!----><!--@font-face {font-family:宋体}@font-face {font-family:宋体}@font-face {font-family:Calibri}@font-face {font-family:"\@宋体"}p.MsoNormal, li.MsoNormal, div.MsoNormal {marg原创 2013-04-16 17:30:42 · 1841 阅读 · 1 评论 -
java线程(二)线程同步问题
<!--@font-face {font-family:宋体}@font-face {font-family:宋体}@font-face {font-family:Calibri}@font-face {font-family:"\@宋体"}p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; mar原创 2013-04-17 07:42:08 · 1340 阅读 · 0 评论 -
Java Socket编程
Socket:两个java应用程序可通过一个双向的网络通信连续实现数据交换,这个双向链路的一端称为一个Socket。 Socket通常用来实现client-server连接。 Java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端(像qq那样,互相通信)。 建立连接时所需要的寻址信息为远程计算机的IP地原创 2013-04-17 13:24:07 · 5666 阅读 · 1 评论 -
java线程(三)生产者和消费者问题
一些人吃馒头,一些人拿馒头。抽象出来的对象:吃馒头的人,生产馒头的人,馒头,操作过程类。 //模拟死锁。 public class ProducerConsumer { public static void main(String[] args){//执行这个过程。SyncStack ss = new SyncStack();原创 2013-04-17 13:06:29 · 1402 阅读 · 0 评论 -
java线程(一)创建和启动线程
<!----><!--@font-face {font-family:宋体}@font-face {font-family:宋体}@font-face {font-family:Calibri}@font-face {font-family:"\@宋体"}p.MsoNormal, li.MsoNormal, div.MsoNormal {marg原创 2013-04-17 07:26:22 · 3489 阅读 · 0 评论