- 浏览: 2622172 次
- 性别:
- 来自: 广州
最新评论
-
hsluoyz:
PyCasbin是一个用Python语言打造的轻量级开源访问控 ...
权限管理的一个简单后台 -
liuyachao111:
谢谢 问题解决了
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾 -
jnjeC:
多谢博主分享,在配置文件里的&也要改成& ...
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾 -
大维啊:
同志,你这不行啊!
java 的 AccessController.doPrivileged使用 -
lisha2009:
解决了我的问题,多谢博主分享!
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
文章列表
java线程池自己掉进去的坑
- 博客分类:
- 高并发
java线程池的maximumPoolSize的生效条件真的是要注意下
在做防穿透cache的时候,有这样的以一个场景,平时需要的线程很少,偶尔会有比较高的并发,自己对Executors提供的几个方法都不怎么满意,决定自己写一个:
private static ExecutorService executorService = new ThreadPoolExecutor(1, 4,
60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory)
但是后面发 ...
java序列化框架性能比较
- 博客分类:
- java基础
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 {
...
java 关闭main方法中的定时器线程
- 博客分类:
- java基础
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 ...
本地调试springmvc返回乱码的解决
- 博客分类:
- 坑
解决办法 设置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 ...
java重复批次执行
- 博客分类:
- 高并发
方案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个,直接返回全部,否则再随机
最上面错误的做法是 过滤逻辑和随机逻辑混在一起,就容易出问题。
项目中出现的死循环(1)
- 博客分类:
- 游戏项目
做的项目是个网页游戏
出现的死循环的地方:
我们有个玩法是远征,战斗结束后立马开始下一个战斗。
我们用的是个回调: onBattleEnd 如果还有下一场战斗就返回true,没有就返回false。
返回true的时候战斗系统会继续战斗
问题出现在业务代码写的有点问题,一直返回true,然后就是一直战斗了。
hibernate不能创建表坑爹的原因
- 博客分类:
- 数据库
原因是 我们有个字段名叫index 这个是数据库的关键字
但是hibernate居然没有报任何的错