java
文章平均质量分 84
木木那年
从事java相关
展开
-
LockSupport
javadoc用于创建锁和其他同步类的基本线程阻塞原语。这个类与每个使用它的线程相关联,一个许可证(在Semaphore类的意义上)。如果许可证可用,则呼叫park将park返回,在此过程中消耗它;否则可能会阻止。调用unpark使许可证可用,如果尚不可用。(与信号量不同,许可证不能累积,最多只有一个。)方法park和unpark提供了阻止和解除阻塞线程的有效手段,该方法不会遇到导致不推荐使用的方法Thread.suspend和Thread.resume目的不能使用的问题:一个...原创 2021-05-06 16:17:40 · 200 阅读 · 0 评论 -
AQS 源码解读
1.先看一下类图2.开始跟代码找一个入口new ReentrantLock()默认是非公平锁,false是非公平进入lock.lock(),在ReentrantLock中的实现看到是sync的lock方法 Sync是ReentrantLock的子类找抽象方法lock()在非公平锁中的实现compareAndSetState(0,1) 如果状态是0 更新为 1setExclusiveOwnerThread(Thread.currentThr...原创 2021-04-18 12:30:59 · 240 阅读 · 0 评论 -
系统CPU飙高和频繁GC问题查询思路
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,然后重启系统,尽快保证系统的可用性。这种情况可能的原因主要有两种:代码中某个位置读取数据量较大,导致系统内存原创 2020-10-15 11:03:17 · 548 阅读 · 0 评论 -
JUC学习笔记(2)—线程间通信
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class ShareData{ private int number = 0; private Lock lock = ...原创 2018-07-31 21:31:33 · 183 阅读 · 0 评论 -
JUC学习笔记(3)—Lock锁
一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法 加个普通方法后发现和同步锁无关换成两个对象后,不是同一把锁了,情况立刻...原创 2018-07-31 21:36:38 · 191 阅读 · 0 评论 -
JUC学习笔记(4)—多线程之间按顺序调用
多线程之间按顺序调用,实现A->B->C 三个线程启动,要求如下:AA打印5次,BB打印10次,CC打印15次 接着 AA打印5次,BB打印10次,CC打印15次 。来10轮 public class ThreadOrderAccess{ public static void main(String[] args) { ShareResource s...原创 2018-07-31 21:39:34 · 315 阅读 · 0 评论 -
JUC学习笔记(5)—ReadWriteLockDemo
一个线程写入,100个线程读取import java.util.concurrent.locks.ReentrantReadWriteLock;class MyQueue{ private Object obj; private ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); public void ...原创 2018-07-31 21:42:20 · 103 阅读 · 0 评论 -
JUC学习笔记(6)—创建线程的新方法Callable接口
public class CallableDemo{ public static void main(String[] args) throws InterruptedException, ExecutionException { FutureTask<Integer> ft = new FutureTask<Integer>(new MyThread());...原创 2018-07-31 21:44:57 · 118 阅读 · 0 评论 -
JUC学习笔记(7)—CountDownLatch
让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。 CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞), 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。 解释:5个同学陆续离开教室后值班同学才可以关门。也即 秦灭6国,一...原创 2018-07-31 21:57:54 · 169 阅读 · 0 评论 -
JUC学习笔记(8)—CyclicBarrier
CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。线程进入屏障通过CyclicBarrier的await()方法。 public class CyclicBarrierDemo{ private stat...原创 2018-07-31 22:00:41 · 181 阅读 · 0 评论 -
JUC学习笔记(9)—Semaphore
在信号量上我们定义两种操作:acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),要么一直等下去,直到有线程释放信号量,或超时。release(释放)实际上会将信号量的值加1,然后唤醒等待的线程。信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。 public class SemaphoreDemo{...原创 2018-07-31 22:04:35 · 191 阅读 · 0 评论 -
JUC学习笔记(10)—线程池
public class ExecutorsDemo{ public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(5); ScheduledFuture<Integer> result = null; try...原创 2018-07-31 22:06:28 · 112 阅读 · 0 评论 -
JUC学习笔记(11)—CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap
public class NotSafeDemo{ public static void main(String[] args) { Map<String,String> map = new ConcurrentHashMap<String,String>(); for (int i = 1; i <=30; i++) { new T...原创 2018-08-01 22:09:23 · 248 阅读 · 0 评论 -
Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)
前言本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。本教程源代码:https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay一、支付宝测试环境代码测试1. 下载电...转载 2018-08-05 21:23:42 · 220 阅读 · 0 评论 -
HashMap和ConcurrentHashMap原理及源码解读
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具...转载 2018-08-13 20:34:00 · 150 阅读 · 0 评论 -
Java-RandomAccessFile-实现文件随机读写
现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”。可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实现了,直接使用Java中的流读取了txt文本里原来所有的数据转成字符串后,然后拼接了“Lucene是一款非常优秀的全文检索库”,又写回文本里了,至此,大功告成。后来需求改了,向5G数据的txt文本里追...转载 2018-12-04 17:52:09 · 603 阅读 · 0 评论 -
JUC学习笔记(1)—ReentrantLock
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Ticket//资源类 类 = 实例变量+实例方法{ private int number = 30; //Lock implementations provide more extensi...原创 2018-07-31 21:27:22 · 154 阅读 · 0 评论 -
Netty3.x用户指南翻译(1)
第一章:开始这一章教程,使用简单的例子让你快速了解Netty的架构。当你读完这一章,你可以在Netty基础之上,写一个客户端和服务端。1. 开始之前能运行这一章实例的最小要求有两个:①,JDK 1.5以上,②,Netty版本3.7(因为我是翻译的3.7版本的用户指南)。当你确定了,你对这一章的内容中的类可能还有更多的问题。如果想知道更多关于这些类的消息,请查询API.为了你的便利所有的类都会在在线...原创 2018-05-22 10:16:06 · 249 阅读 · 0 评论 -
配置JDK时的环境变量的含义(转)
在学习Java的过程当中,我们第一天就会学习到JDK的安装。在安装JDK的过程当中,一个很重要的环节就是设置操作系统的环境变量。一个是path,另一个是classpath。这两个环境变量,很多初学者只是了解应该怎样设置给背下来了,并不知道设置这两个环境变量的作用是什么?今天我们就一起来探索一下,因为这两个环境变量非常的重要,特别是classpath这个环境变量,对开发当中各种配置文件,部署描述符的...转载 2018-05-15 15:19:33 · 897 阅读 · 0 评论 -
面试问题
坐标北京刚刚面试了几家公司,要求都是17k左右,拿到两个offer,谈谈体会,建议学习的时候又一个精简的笔记,是概括的过程,复习的过程转载 2016-04-29 16:31:00 · 292 阅读 · 0 评论 -
java基础-Map
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入转载 2016-05-03 15:58:11 · 460 阅读 · 0 评论 -
集合-01-数组
有两方面的问题将数组与其他集合类型区分开来:效率和类型。对于 Java 来说,为保存和访问一系列对象(实际是对象的句柄)数组,最有效的方法莫过于数组。数组实际代表一个简单的线性序列,它使得元素的访问速度非常快,但我们却要为这种速度付出代价:创建一个数组对象时,它的大小是固定的,而且不可在那个数组对象的“存在时间”内发生改变。可创建特定大小的一个数组,然后假如用光了存储空间,就再创原创 2016-05-05 10:49:29 · 276 阅读 · 0 评论 -
基于JAVA的黄金数据接口调用代码实例
1. [代码][Java]代码 跳至 [1] [全屏预览]?1234567891011121314151617181920212223242526转载 2016-05-16 14:31:45 · 2700 阅读 · 0 评论 -
]JAVA发送短信
这几天,正好项目的间歇期,就研究了JAVA语言发送手机,呵呵,小有心得,做个笔记: JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,呵呵;(3)使用中国网建提供的SMS短信转载 2016-05-16 14:33:19 · 313 阅读 · 0 评论 -
shiro控制不同模块登录地址
一个模块可能是后台,可能是前台,这个理如何实现区分2个模块的登录地址针对模块写一个过滤器,设置当用户没有登录时应该去哪个地址,超简单,多个模块可以区分地址跳转多模块公用过滤器也是可以的@Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response)转载 2016-05-16 14:36:49 · 3338 阅读 · 0 评论 -
基于JAVA的货币汇率api调用代码实例
代码描述:基于JAVA的货币汇率api调用代码实例关联数据:货币汇率接口地址:http://www.juhe.cn/docs/api/id/23标签: 代码片段(1)[全屏查看所有代码]1. [代码][Java]代码 ?12345678转载 2016-05-16 14:42:15 · 2346 阅读 · 0 评论 -
Java 程序员们值得一看的好书推荐
学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料对着书上的代码自己敲的时候方便“看完书之后再次提升自我的最好途径是看一些相关的好博文“,我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼转载 2016-05-05 13:53:49 · 514 阅读 · 0 评论 -
Java Web项目中使用Freemarker生成Word文档
Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob、Apache POI、Java2Word、iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单。转载 2016-06-24 13:16:47 · 923 阅读 · 0 评论 -
HashMap实现原理
HashMap 的get 方法://调用get方法返回Entrypublic V get(Object key) { if (key == null) return getForNullKey(); Entry entry = getEntry(key); return null == entry ?原创 2016-07-27 14:03:23 · 306 阅读 · 0 评论 -
XML转成Json
package com.guanqi.xml2json;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import org.dom4j.*;import java.io.File;import java.io.FileInputStream;import java.nio.B...翻译 2018-05-10 15:33:12 · 338 阅读 · 0 评论 -
根据当前系统的实时负载生成动态大小的线程池
原则:削峰填谷根据4个方面的系统信息动态决定线程池大小:1、CPU负载 ,包括系统全局的cpu负载以及jvm实例的cpu负载 2、内存使用情况 3、系统线程使用情况,当前活动线程数与线程峰值 4、swap情况,系统颠簸会导致页面置换频繁package com.oschina.mingyuan.dynamicexecutor; import java.lang.management.Manage...转载 2018-05-10 15:54:30 · 2650 阅读 · 0 评论 -
如何正确的重写equals() 和 hashCode()方法
本文将介绍在java中如何重写equals 和hashCode方法。---译自:http://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/比较两个Java对象时, 我们需要覆盖equals和 hashCode。[java] view plain copypublic class User{ priv...转载 2018-05-04 10:38:36 · 164 阅读 · 0 评论 -
Nginx+Tomcat windows环境下简单集群搭建
一、 工具 nginx-1.8.0 apache-tomcat-6.0.33二、 目标 实现高性能负载均衡的Tomcat集群: 三、 步骤 1、首先下载Nginx,要下载稳定版: 2、然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3、然后修改这两个Tomcat的启动端...转载 2018-05-15 10:14:23 · 1184 阅读 · 0 评论 -
月薪2w的程序员技能
作者:匿名用户链接:https://www.zhihu.com/question/39890405/answer/83676977来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。首先两万的月薪在BAT实在太普遍了,一般是高级工程师和资深工程师的职位。在阿里是p6~p7左右,在百度是t5左右,腾讯是t2-3左右,京东是t3-1,美团是p6左右,其他的转载 2016-04-29 16:23:39 · 4305 阅读 · 1 评论