java-综合频道
文章平均质量分 78
kdy527
这个作者很懒,什么都没留下…
展开
-
线程高级篇-Lock锁和Condition条件
浅谈Synchronized: synchronized是Java的一个关键字,也就是Java语言内置的特性,如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,执行代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而获取锁的线程释放锁会有三种情况: 1).获取锁的线程执行完该代码块,然后线程释放对锁的占有; 2).线程执行发生异常,此时JVM会...转载 2018-12-20 17:23:04 · 176 阅读 · 0 评论 -
HashMap HashTable ConcurrentHashMap 区别
1. Hashtable 和 HashMap(1)区别,这两个类主要有以下几方面的不同:Hashtable和HashMap都实现了Map接口,但是Hashtable的实现是基于Dictionary抽象类。 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。 当get()方法返回null值时,即可以表示 HashMap中没有转载 2017-09-06 20:44:23 · 228 阅读 · 0 评论 -
Java 时间与日期处理
Java 时间与日期处理在 Java 8 之前,我们最常见的时间与日期处理相关的类就是 Date、Calendar 以及 SimpleDateFormatter 等等。不过 java.util.Date 也是被诟病已久,它包含了日期、时间、毫秒数等众多繁杂的信息,其内部利用午夜 12 点来区分日期,利用 1970-01-01 来计算时间;并且其月份从 0 开始计数,而且用于获得年、月、日等原创 2017-08-18 17:02:51 · 1443 阅读 · 0 评论 -
详谈java内存模型
我们一起来讨论讨论Java内存模型。理解内存模型对多线程编程无疑是有好处的。本文包括以下几个部分:java代码是如何跑起来的java代码如何运行虚拟机的解释器和编译器为什么需要JITJIT编译什么为什么多线程的代码可能出现诡异的结果指令重排去掉无效的语句不同的平台java内存模型模型简介内存屏障同步机制volatilesync转载 2017-07-24 18:04:14 · 417 阅读 · 0 评论 -
java中的锁
什么是锁锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂。因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 自Java 5开始,java.util.concurrent.locks包中包含了一些锁的实现,因此你不用去实现自己的锁了。但是转载 2017-07-24 17:38:17 · 217 阅读 · 0 评论 -
ThreadPoolExecutor使用介绍
为了更好的使用多线程,JDK提供了线程池供开发人员使用,目的在于减少线程的创建和销毁次数,以此达到线程的重复利用。其中ThreadPoolExecutor是线程池中最核心的一个类,我们先简单看一下这个类的继承关系。 其中Executor是线程池的顶级接口,接口中只定义了一个方法 void execute(Runnable command);线程池的操作方法都是定义子在Executor...转载 2017-06-15 18:21:58 · 347 阅读 · 0 评论 -
非阻塞同步机制与CAS操作
锁的劣势 Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程 持有守护变量的锁,都采用独占的方式来访问这些变量,如果出现多个线程同时访问锁,那第一些线线程将被挂起,当线程恢复执行时,必须等待其它线程执行完他 们的时间片以后才能被调度执行,在挂起和恢复执行过程中存在着很大的开销。锁还存在着其它转载 2017-06-15 18:16:53 · 250 阅读 · 0 评论 -
原子性与可见性
一、定义1.可见性在多核处理器中,如果多个线程对一个变量(假设)进行操作,但是这多个线程有可能被分配到多个处理器中运行,那么编译器会对代码进行优化,当线程要处理该变量时,多个处理器会将变量从主存复制一份分别存储在自己的片上存储器中,等到进行完操作后,再赋值回主存。(这样做的好处是提高了运行的速度,因为在处理过程中多个处理器减少了同主存通信的次数);同样在单核处理器中这样由于“备份”转载 2017-06-15 18:13:13 · 173 阅读 · 0 评论 -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。注:什么叫线程安全?这个首先要明确。线程安全就是说多线程访问同转载 2017-06-15 15:13:40 · 180 阅读 · 0 评论 -
简析SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue
SynchronousQueue SynchronousQueue是无界的,是一种无缓冲的等待队列,但是由于该Queue本身的特性,在某次添加元素后必须等待其他线程取走后才能继续添加;可以认为SynchronousQueue是一个缓存值为1的阻塞队列,但是 isEmpty()方法永远返回是true,remainingCapacity() 方法永远返回是0,remove()转载 2017-06-15 14:01:02 · 191 阅读 · 0 评论 -
java中synchronized关键字的用法
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的转载 2017-09-27 18:12:38 · 157 阅读 · 0 评论 -
synchronized的4种用法
1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入. 例如: public synchronized void synMethod() {转载 2017-09-27 18:13:39 · 521 阅读 · 0 评论 -
异步,并发/并行,串行
同步:多个任务情况下,一个任务A执行结束,才可以执行另一个任务B。只存在一个线程。异步:多个任务情况下,一个任务A正在执行,同时可以执行另一个任务B。任务B不用等待任务A结束才执行。存在多条线程。接下来分析一下并行/并发,串行。很多人大概会混淆这些概念。并发和并行其实是异步线程实现的两种形式。并行其实是真正的异步,多核CU原创 2017-11-01 18:24:03 · 316 阅读 · 0 评论 -
linux 学习日记
一、shell中的特殊变量:变量名 含义$0 shell或shell脚本的名字$* 以一对双引号给出参数列表$@ 将各个参数分别加双引号返回$# 参数的个数$_ 代表上一个命令的最后一个参数$$ 代表所在命令的PID$! 代表最后执行的后台命令的PID$? 代表上一个命令执行后的退出状态二、...原创 2018-12-20 16:45:59 · 194 阅读 · 0 评论 -
Java网络编程--Socket编程(1)--Socket缓冲区探讨
本文主要探讨java网络套接字传输模型,并对如何将NIO应用于服务端,提高服务端的运行能力和降低服务负载。 1.1 socket套接字缓冲区 Java提供了便捷的网络编程模式,尤其在套接字中,直接提供了与网络进行沟通的输入和输出流,用户对网络的操作就如同对文件操作一样简便。在客户端与服务端建立Socket连接后,客户端与服务端间的写入和写出流也同时被建立,此时即可向流...转载 2018-12-19 19:46:28 · 4946 阅读 · 0 评论 -
安装LINUX 虚拟机,配置JDK,配置 REDIS,配置TOMCAT(附安装配置文件)
一,安装LINUX 虚拟机虚拟机可选择:VMware,本文以此为例linux虚拟街(32位)下载地址:https://pan.baidu.com/s/1_6NRza9IRxEMfCIf_QDJKQ,密码:g1pv1.点击主页-创建新的虚拟机,也可以点击文件-新建虚拟机2.默认典型,点击--下一步3.点击--浏览,找到下载的镜像文件xxx.iso所在的位置4.找到后点击--打开5.点击--下一步6....原创 2018-04-19 21:54:04 · 632 阅读 · 0 评论 -
jstack简单使用,定位死循环、线程阻塞、死锁等问题
阅读目录死循环Object.wait()情况死锁等待IO其它当我们运行java程序时,发现程序不动,但又不知道是哪里出问题时,可以使用JDK自带的jstack工具去定位;废话不说,直接上例子吧,在window平台上的;死循环写个死循环的程序如下:package concurrency;public class Test {转载 2018-01-05 15:34:05 · 258 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足转载 2018-01-05 15:16:57 · 260 阅读 · 0 评论 -
JAVA配置环境变量的意义
集成开发环境(比如Eclipse)给开发者太多的便利了,以至于初学者都不知道程序是如何从源码生成可执行文件的。对于环境变量的认识也是如此,只知道要在一台新电脑上开发java,安装JDK后的第一步是配置环境变量。至于为何要配置,或许并非有个确定的认识。怀着大概就是那个意思的糊涂心态,就过去了。 首先是环境变量。引用百度百科的定义:环境变量,是在操作系统中一个具有特定名字的对象,它包转载 2018-01-04 17:12:56 · 372 阅读 · 0 评论 -
JVM 自带线程
一个JVM 启动之后,自己会启动一些线程。我们在jstack的时候可以排除掉这些。只关注我们自己业务产生的线程代码Java代码 package com.cases; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.Manageme转载 2017-11-21 18:50:47 · 296 阅读 · 0 评论 -
JAVA 并发编程-多个线程之间共享数据
多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。2,如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,例如,设计4个线程。其中两个线程每次对j增加1,另外两个线程对j每次减1,银行存取款 有两种方法来解决此类问题:将共享转载 2017-11-21 18:50:13 · 233 阅读 · 0 评论 -
正则表达式基本语法
两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。例子如下:"^The":表示所有以"The"开始的字符串("There","The cat"等);"of despair$":表示所以以"of despair"结尾的字符串;"^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的原创 2017-11-14 10:59:07 · 226 阅读 · 0 评论 -
线程池 ExecutorService 详细介绍以及注意点区别
线程池 ExecutorService 相信Java开发都用到,这里做个简单笔记一 Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。转载 2017-06-14 18:21:04 · 197 阅读 · 0 评论 -
【Java线程】Java线程池ExecutorService四种详解
示例import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; public class Ch09_Executor {转载 2017-06-14 18:20:07 · 284 阅读 · 0 评论 -
ConcurrentLinkedQueue的实现原理分析
1. 引言在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列Concurr转载 2017-04-21 17:24:27 · 199 阅读 · 0 评论 -
ServerSocketChannel与SocketChannel的使用
TCPServer.Java[html] view plain copy print?package com.xy.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.Selectio转载 2017-04-21 11:40:55 · 224 阅读 · 0 评论 -
ServerSocket 与 Socket的区别
1.1 ServerSocket类 创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务,如: ServerSocket MyListener=new ServerSocket(600); 这里指定提供监听服务的端口是600,一台计算机可以同时提供多个服务,这些不同的服务之间通过端口号来区别,不同的端口号上提供不同的服务。为了随时监原创 2017-04-20 18:52:45 · 505 阅读 · 0 评论 -
使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket
在使用传统的ServerSocket和Socket的时候 很多时候程序是会阻塞的比如 serversocket.accept() , socket.getInputStream().read() 的时候都会阻塞 accept()方法除非等到客户端socket的连接或者被异常中断 否则会一直等待下去read()方法也是如此 除非在输入流中有了足够的数据 否则该方法也会一直等待下去知道原创 2017-04-20 18:51:18 · 677 阅读 · 0 评论 -
BlockingQueue
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个原创 2017-05-02 11:31:24 · 191 阅读 · 0 评论 -
Java 序列化Serializable详解(附详细例子)
1、什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。2、什么情况下需要序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;b)当你想用套接字在网络上传送对象的时候;c)当你想通过RMI传输对象的时候;3、如何原创 2017-04-19 19:25:32 · 203 阅读 · 0 评论 -
Java数据通讯中使用Googgle Protobuf 序列化与反序列化
概念1.什么是protocol bufferProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。 1. google官方连接地址 http://code.google.com/p原创 2017-04-19 10:39:51 · 479 阅读 · 0 评论 -
java 关于时间的转换,两个时间日期的比较
1.判断两个long型的毫秒是不是同一天,使用的缺省时区ublicclass TimeUtil { publicstatic final int SECONDS_IN_DAY = 60* 60* 24; publicstatic final long MILLIS_IN_DAY =原创 2017-04-19 14:45:13 · 412 阅读 · 0 评论 -
java程序main方法的参数String[] args
123456789101112public class ArgsTest{ public static void main(String[] args) { System.out.println(args.length);原创 2017-05-04 11:20:40 · 451 阅读 · 0 评论 -
HashMap与ConcurrentHashMap的区别
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable转载 2017-04-24 14:15:11 · 211 阅读 · 0 评论 -
Comparable和Comparator的区别
ComparableComparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,转载 2017-06-14 17:44:26 · 342 阅读 · 0 评论 -
CopyOnWriteArrayList
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。转载 2017-06-14 17:11:08 · 209 阅读 · 0 评论 -
MySQL数据库(主键、索引、外键、触发器...)
主键: 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。索引: 是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作转载 2017-07-12 20:49:33 · 1385 阅读 · 0 评论 -
sql:建表,插入,查询语句
建表CREATE TABLE IF NOT EXISTS `player` ( `userID` int(10) NOT NULL COMMENT '用户ID', `createAreaID` int(10) NOT NULL COMMENT '创建区ID', `playerID` int(10) NOT NULL COMMENT '角色ID', `uid` varch原创 2017-07-12 20:45:15 · 510 阅读 · 0 评论 -
JAVA CAS原理深度分析
看了一堆文章,终于把Java CAS的原理深入分析清楚了。感谢GOOGLE强大的搜索,借此挖苦下百度,依靠百度什么都学习不到! 参考文档:http://www.blogjava.NET/xylz/archive/2010/07/04/325206.htmlhttp://blog.hesey.net/2011/09/resolve-aba-by-atomics转载 2017-07-11 16:08:26 · 315 阅读 · 0 评论 -
Java 判定标点符号
String str = "本站提!!,供的程序?均为网上搜集,如果该程序涉\"及或侵'害到" + "您的,,版权请立即写信通知我们。"; str = str.replaceAll("[\\pP]", "-"); //正则表达式 String[] arr = str.split("-"); str = ""; for(int i=0; i String temp = arr[i]原创 2017-06-21 14:30:48 · 960 阅读 · 0 评论