`
文章列表
java线程池的maximumPoolSize的生效条件真的是要注意下 在做防穿透cache的时候,有这样的以一个场景,平时需要的线程很少,偶尔会有比较高的并发,自己对Executors提供的几个方法都不怎么满意,决定自己写一个: private static ExecutorService executorService = new ThreadPoolExecutor(1, 4, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory) 但是后面发 ...
1.  Kryo 2.  FST 3.  java 原生序列化方法 测试结果是kryo的性能最好的,在复杂对象的时候比fst好20%,简单对象的时候会好一倍。 而且kryo的内存使用比fst少很多,波动也平缓很多。
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * Created by cloud.huang on 16/5/20. */ public class ScheduledThreadPoolCloseTest { public static void main(String[] args) throws Exception { ...
public class TestTreadClose { public static volatile boolean flag = true; public static void main(String[] args) throws Exception { Thread t = new Thread() { @Override public void run() { int i = 0; while (flag) { ...
AtomicLong 是通过cas来实现的,已经很高效了,还有不有优化的空间呢。 我们知道AtomicLong在高并发的时候,可能要尝试多次才能成功。 AtomicLong的作者是Doug lea ,他的想法是把竞争分散: 具体的做法是把一个数拆成多个数的和,修改的时候只改其中一个数,这样冲突的概率减少很多。 具体做法: transient volatile long base; transient volatile Cell[] cells; 修改 public void add(long x) { Cell[] as; long ...
java8之前的做法: 加6个无用的long字段 如: public final static class VolatileLong2 { private long value ; private long q0, q1, q2, q3, q4, q5, q6; } 上面的做法其实有个问题:每个CPU微架构的cache line大小不一定一样,这种手动添加固定的padding字段的做法有可能浪费了空间、也有可能不够用。最好还是让VM来解决这个问题。 JVM在计算对象布局时会知道有字段被标记上了@Contend ...
首先直接说原因: 因为linux 下的PATH变量错误导致的 需求:让运营打包时修改应用名,比如wifi管家改为天天wifi管家 做法: 修改res/values/strings.xml的app_name字段。 问题过程  :很愉快的用shell替换了 sed "s/<string name=\"app_name\">.*<\/string>/<string name=\"app_name\">${new_app_name}<\/string>/" $DECODE_PATH/re ...
解决办法 设置idea的javac的编码 项目环境是idea + tomcat 解决思路 1 debug  发现debug的时候已经是乱码了,但是那个变量的内容写死在代码中的,排除了数据库和其他干扰。 2 但是代码中的中文怎么会变成代码呢 ,看了文件编码是utf8,项目编码各种编码都设置成utf8了。还是没有效果 3 pom文件中的compile插件也设置了编码 <plugin> <groupId>org.apache.maven.plugins</groupId> &l ...
ResponseBody是通过RequestResponseBodyMethodProcessor起作用的。 我们的做法是写一个包装类,替换掉他 package com.qq.secure.rj.webapp; import com.google.common.collect.Lists; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframewo ...
方案1  使用Phaser 方案2  使用CyclicBarrier package com.eyu.ahxy.module.common.config; import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest4.MAX; import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest4.NUM; import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest4.phaser; ...
两个线程,分别打印[1,3,5]和[2,4,6],写一个程序,打印[1,2,3,4,5,6]。 方案1 用synchronized 配合wait notify 方案2 用ReentrantLock配合condition 方案3 对线程数据取余,直接调用线程的run方法 方案1不能实现超过2个线程的要求,因为notify是不能保证唤醒哪个线程 下面分别是3种实现的代码 package com.eyu.ahxy.module.common.config; import java.util.concurrent.TimeUnit; import static com.eyu.ahxy. ...
import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.filterchain.IoFilterAdapter; import org.apache.mina.core.session.IoSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 策略文件过滤器 */ public class PolicyFilter extends IoFilterAdapter { privat ...
有10个奖励,随机得到3个,10个中有些是不符合要求的,要过滤掉。 游戏中过滤逻辑写得不对,过滤了8个,得到的结果只有2个,还没有满足3个,所以一直循环下去。 正确的做法是,先过滤掉不符合要求的,如果小于3个,直接返回全部,否则再随机 最上面错误的做法是 过滤逻辑和随机逻辑混在一起,就容易出问题。
做的项目是个网页游戏 出现的死循环的地方: 我们有个玩法是远征,战斗结束后立马开始下一个战斗。 我们用的是个回调: onBattleEnd  如果还有下一场战斗就返回true,没有就返回false。 返回true的时候战斗系统会继续战斗 问题出现在业务代码写的有点问题,一直返回true,然后就是一直战斗了。
原因是 我们有个字段名叫index   这个是数据库的关键字 但是hibernate居然没有报任何的错
Global site tag (gtag.js) - Google Analytics