- 浏览: 27037 次
- 性别:
- 来自: 北京
最新评论
-
yukang1:
大哥 好想要源码. 你的代码不全啊 我的亲哥啊
使用纯java ssh方式连接linux服务器,并用此方式部署war到linux的tomcat下
文章列表
CountDownlatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待,此场景适用在完成所有任务之后才能继续下面的任务的场景 比如下面田径运动员 只有运动员全部跑完比赛才能 进行下面的成绩统计
import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
*
* CountDow ...
在java的同步关键字synchronized 我们知道用在多线程同步并发情况下,用来在修饰方法或者代码块上
修饰方法 监视的是整个对象 那么如果修饰的分别是静态方法和非静态方法呢 ,效果一样吗?
下面请看我这个例子
package com.test.thread;
public class SynchronizedClass {
/**
* 非静态 synchroized 方法
* @throws InterruptedException
*/
public synchronized void nonStaticFunction ...
一,线程池
我们知道线程不可能无限制的创建,但是现实需求中遇到并发请求多任务的时候,会用多线程来处理,但是这么多的线程又不可能全部创建出来,这时我们就会想到线程池了,
说道线程池,它其实就是一种管 ...
并发与并行的区别
如果一个系统中支持两个或者多个动作同时存在,那么我们称这个系统为并行系统,
如果一个系统中支持两个或者多个动作同时执行,那么我们称这个系统为并发系统。
上述描述中我们可以看出两个区别在于存在关键字
如果我们系统中编写多个线程或者进程,在单核处理器cpu下,同时驻留内存,不断切换cpu交替执行,那么我们称它为并发,且这种情况下只能会出现并发,没法并行。
如果在多核处理器中,每个线程或者进程获得独自的cpu处理器进行同时执行,那么我们称之并 行,如果每个线程或者进程在多核处理器中 仍然不能获得独自处理器,需要跟其他线程或者进程竞争抢占资源,那么我们也把它称之为 ...
乐观锁
乐观锁是一种思想,是给数据库表添加一个字段(数据库默认会给表添加一个版本号字段),在更新数据之前会先读取这个字段,更新缓存数据到表中时,再去检查这个字段是否在此期间被其他程序操作过,
如果这个字段被修改过,那么就拒绝更新,此次操作失败。
悲观锁是一种读写期间阻止其操作修改的锁,
乐观锁和悲观锁适用主要还是看业务场景,而不能天真的认为一个好于另一个,乐观锁主要用于写操作少读操作多的场景,因为如果写操作过多,增加与读操作的碰撞概率,导致经常写失败,重新尝试次数增加,影响性能,而悲观锁则是等待前一个结果完成以后,才进行的更新
一,java的类加载要经历七个过程
加载
加载类时加载的第一个过程,在这个阶段,将完成三件事:
1)通过一个类的全限定名获取该类的二进制流
2)将该二进制中的静态存储结构转化为方法区运行时数据结果
3)在 ...
java内存模型(JMM)是线程间通信的控制机制,jmm定义了主内存和线程之间的抽象关系,线程之间的共享变量存储在主内存(main-memory)中,每个线程都有一个私有的本地内存(local memory)
,本地内存中存储了该线程以读/写共享变量的副本。本地内存是jmm的一个抽象概念,并不真实存在。他涵盖了缓存,写缓存区,寄存器以及其他的硬件和编译器优化。java内存模型的抽象示意图如下 从图中可知A 和B两个线程如果通信的话
首先A线程将共享变量刷到主内存中
其次B线程到主内存中加载更新共享变量
这里写的说明的非常好:http://www.infoq.com/cn/articl ...
java 中垃圾回收的方法有哪些呢
1.标记-清理
这个垃圾回收方法 根据名字就可以知道,他的思想就是标记那些要回收的对象,然后统一回收清理,这个方法方法简单,但是会有两个主要问题:
(1)效率不高,标记和清除的效率低下,(2)会产生大量的内存碎片,导致程序在分配较大的对象时,没有足够内存提前触发一次GC动作
2 .复制算法
为了解决效率问题,复制算法将可用内存按容量划分为相等的两部分,然后每次使用其中的一块,当一块内存使用完时,就将还存活的对象复制到第二块内存上,然后
一次性清楚完第一块内存,再讲第二块的对象复制到第一块,但是这种方式,内存的代价太大,每次基本都要浪费 ...
jvm知识点-GC知识点
- 博客分类:
- jvm
一,怎么样判断一个对象是否存活的两种方法
1),引用计数法:
所谓引用计数法就是给每个对象设置一个引用计数器,每当有别的对象引用此对象时 ,引用计数器就加一,每当引用失效时,引用计数器就减一,当引用计数器减到零时,表示这个对象为“死对象”,可以被GC回收了,
当然引用计数器也有缺陷,他的缺陷就是无法解决循环引用的问题,比如A对象引用B对象,B对象也引用A对象时,A,B对象的引用计数器都不为零,但是两对象为没有被其他对象引用的“死对象”,无法按照引用计数器规则回收。
2) 可达性算法(引用链法)
该算法的思路是:从一个被称为GC Roots的对象开始向下查找,当整 ...
1,jvm的内存分那些区呢?
方法区:
1),有时候也成永久代,在该区很少发生GC,但不代表不发生GC,在这里进行的GC主要是对常量池的回收和对象类型的卸载
2 ) ,方法去主要是用来存储已被虚拟机加载的类的信息、常量、静态变量、和即时编译后的的代码等数据
3)、该区是被线程共享的
4)、方法区有一个运行时常量池,用于存储静态编译产生的字面量he符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定的,运行时生成的常量也会存在这个常量池中
虚拟机栈:
1),虚拟机栈也就是我们常说的栈内存,它为java方法服务,每个方法在执行的时候会创建一个 ...
package test;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
public class MultiFileNaming{
AtomicInteger s=new AtomicInteger();
public static void main(String[] args) throws IOException {
String name=& ...
一,图的两种算法
本章承接上一章 具体的一些说明或者资料可以到上一章中寻找
1, 深度优先遍历
说深度优先遍历之前 我们先说说走迷宫的走法,
要探索迷宫中所有的通道,我们需要做以下几种事,
1):选择一条没有标记过的通道,在你走过的路上铺一条绳子;
2):标记所有你第一次路过的路口和通道;
3):当来到一个标记的路口(有绳子的路口)时回退到上一个路口
4):当回退到的路口已经没有可走的通道时继续回退。
这样绳子可以保证你总能找到一条出路,标记保证了你不会两次同时经历一条通道
代码如下
package com.lxy.datastructure.graph; ...
一 图
1,图的描述
在计算机应用中,我们为了表示相连结点所表示的关系建立模型,并且这些结点之间连接很自然而然会让人产生一连串的的疑问:沿着这些连接能否从一个结点到另一个结点呢,
有多少个结点之间是相互连接着呢?两个结点之间哪一条是最短路径呢等等。
要描述这些问题,我们使用一种抽象的数据模型-图数据模型,应用此模型我们可以解决很多现实中的问题,比如地图中的两个城市之间线路问题,电路板中各种元器件与导线的连接问题,学生与各学校的配对问题等等
图的分类大致分为:无向图,有向图,加权图和加权有向图
图的定义:图是由一组顶点和一组能 ...
tomcat源码研究之参数编码格式处理
- 博客分类:
- 开源框架
一,我们知道tomcat作为web服务器以后,我们编写的Servlet 请求中经常出现 中文乱码问题,而出现这些中文乱码,则是以下三种情况
1),来自浏览器地址栏uri携带的中文参数
2),来自页面链接跳转携带的中文参数
3 ),来自表单form中提交成参数
而这些提交方式一般以get和Post提交,那么tomcat是怎么按照什么编码格式解析这些请求参数的呢? 下面请看我的分析,
我们知道不管从get还是post来的请求参数 我们都是以reqest.getParameter(xxx) 和request.getParameterValues(xxx) 来的获取值的
所以我 ...
(1)
在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:
标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
web.xml的配置如下:
<servlet> <servlet-name>initservlet</servlet-name> <servl ...