首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

JAVA 并发编程学习(1)之基本概念

1,为什么需要并发? 在早期计算机中没有操作系统,一台计算机从头到尾只执行一个程序,如果这个程序的任务是先进行CPU计算再把计算结果写入文件。那么,在进行CPU计算时,这台计算机的IO模块是空闲的,把计算结果写入文件中时,这台计算机的CPU是空闲的。 为此,引入了操作系统。这样,在一台计算机中可以运行多个程序了。由操作系统来管理多个程序的运行,一个程序在进行CPU计算的同时,另一个程序可以进行IO操作。提高了计算机的利用率(CPU和IO操作 可以同时在发生了) 引入操作系统之后,不可避免地出现了进程这个概念。因为操作系统管理若干个程序了,而每个运行中的程序可以用进程来表示(进程的动态性)。 那为什么还需要线程呢? ①进程之间需要通信、需要共享一些数据,需要协作……这些用线程来“表示”更方便。因为,不同进程的地址空间是相互独立的,一个进程不能直接访问另一个进程的地址空间。一个进程内部的多个线程共享这个进程状态空间,如果把数据的共享放到线程这个层次来实现,就方便多了。 ②进一步提高资源利用率---这个有点类似于:从没有操作系统的计算机到有操作系统的计算机转变---这里是从没有线程到有线程转变。 2,我们就是因为方便数据共享……一些原因引入了线程,那么多个线程同时访问一个可变的变量时,这个变量到底处理哪一个状态?这就存在一种线程安全性问题。 3,什么是线程安全性 讨论线程安全性针对的是 类。核心就是正确性。即,某个类的行为和其规范完全一致:即,我写了一个类,这个类具有哪些功能,需要完成哪些操作……这些是类的规范;而多个线程运行这个类的代码时,其执行效果和规范描述的要一致。 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 4,无状态对象 5,Race Condition 竞态条件 ①读--修改--写入 ②check--then--act 本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

优秀的个人博客,低调大师

分析一种前缀树的java实现

private class TrieNode{ /** * 标识当前结点是否是一个“关键词”的最后一个结点 * true 关键词的终结 false 继续 */ private boolean isEnd = false; /** * 用map来存储当前结点的所有子节点,非常的方便 * key 下一个字符 value 对应的结点 */ private Map<Character , TrieNode> subNodes = new HashMap<>(); /** * 向指定位置添加结点树 * @param key * @param node */ public void addSubNode(Character key , TrieNode node){ subNodes.put(key , node); } /** * 根据key获得相应的子节点 * @param key * @return */ public TrieNode getSubNode(Character key){ return subNodes.get(key); } //判断是否是关键字的结尾 public boolean isKeyWordEnd(){ return isEnd; } //设置为关键字的结尾 public void setKeyWordEnd(boolean isEnd){ this.isEnd = isEnd; } } /** * 核心算法一:构建字典树 * 根据输入的字符串,逐步构建字典树 * @param textLine */ private void addDirTreeNode(String textLine){ //边界处理 if(textLine == null) return; //临时结点指向根结点 TrieNode tempNode = root; for(int i = 0; i < textLine.length(); i++){ char charWord = textLine.charAt(i); //直接跳过非法文字 if (isSymbol(charWord)) continue; TrieNode node = tempNode.getSubNode(charWord); if (node == null){ //说明tempNode第一次碰到该关键字结点 node = new TrieNode(); tempNode.addSubNode(charWord , node); } //tempNode指向下一个结点,开始下一次循环 tempNode = node; //到敏感词的最后一个字时,标记为红色(关键词结尾) if (i == textLine.length() - 1) tempNode.setKeyWordEnd(true); } }

优秀的个人博客,低调大师

CentOS 7.4 java验证码乱码的问题

新服务器配置发布网站 配置后程序顺利启动在登录时发现验证码无法识别显示出了图片,但是字是乱码 初步估计应该是字体问题 ssh登录服务器查看默认字体 #fc-match msam10.ttf: "msam10" "LyX"确认是字体问题 解决字体问题 1. 从windows系统拷贝 微软雅黑字体 打开文件夹 C:WindowsFonts选中微软雅黑字体,复制拷贝到别的文件夹 2. 将字体文件上传到centos服务器 #mkdir /usr/local/font/default将字体文件上传到default目录中 3.更新字体缓存 #fc-cache 4.再次查看默认字体 #fc-match msyh.ttc: "Microsoft YaHei" "Normal"字体正确 5.重启tomcat #systemctl restart tomcat重启之后 验证码显示正确。

优秀的个人博客,低调大师

16.4. jstat - Java Virtual Machine Statistics Monitoring Tool

# jstat -class 15888 1000 10 Loaded Bytes Unloaded Bytes Time 17409 34782.5 231 339.0 13.21 17409 34782.5 231 339.0 13.21 17409 34782.5 231 339.0 13.21 17409 34782.5 231 339.0 13.21 17409 34782.5 231 339.0 13.21 17409 34782.5 231 339.0 13.21 # jstat -gc 15888 1000 10 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 13824.0 13824.0 1204.1 0.0 2766848.0 2327059.3 349696.0 318073.6 229888.0 101912.6 288 4.895 2 1.055 5.949 13824.0 13824.0 1204.1 0.0 2766848.0 2327059.3 349696.0 318073.6 229888.0 101912.6 288 4.895 2 1.055 5.949 13824.0 13824.0 1204.1 0.0 2766848.0 2327059.3 349696.0 318073.6 229888.0 101912.6 288 4.895 2 1.055 5.949 13824.0 13824.0 1204.1 0.0 2766848.0 2327059.3 349696.0 318073.6 229888.0 101912.6 288 4.895 2 1.055 5.949 # jstat -gcutil 15888 S0 S1 E O P YGC YGCT FGC FGCT GCT 8.71 0.00 84.12 90.96 44.33 288 4.895 2 1.055 5.949 # jstat -compiler 15888 Compiled Failed Invalid Time FailedType FailedMethod 2987 0 0 59.55 0 # jstat -gccapacity 15888 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC 175104.0 2796544.0 2794496.0 13824.0 13824.0 2766848.0 349696.0 5592064.0 349696.0 349696.0 65536.0 524288.0 229888.0 229888.0 288 2 # jstat -gcnew 15888 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 13824.0 13824.0 1204.1 0.0 1 15 13824.0 2766848.0 2327429.8 288 4.895 # jstat -gcnewcapacity 15888 NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 175104.0 2796544.0 2794496.0 931840.0 13824.0 931840.0 13824.0 2795520.0 2766848.0 288 2 # jstat -gcold 15888 PC PU OC OU YGC FGC FGCT GCT 229888.0 101912.6 349696.0 318073.6 288 2 1.055 5.949 # jstat -gcoldcapacity 15888 OGCMN OGCMX OGC OC YGC FGC FGCT GCT 349696.0 5592064.0 349696.0 349696.0 288 2 1.055 5.949 每 1000 毫秒打印一次,一共打印 5 次,还可以加上 -h3 每三行显示一下标题。 # jstat -printcompilation -h3 15888 Compiled Size Type Method 2987 91 1 org/apache/catalina/connector/Request isAlpha 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册