`
edgar108
  • 浏览: 32378 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
文章列表
      由于在AbstractQueuedSynchronizer中用 int state 表示锁状态,ReentrantReadWriteLock要在一个变量上维护读和写2个锁状态,ReentrantReadWriteLock把state 切分为2个部分,高16位表示读,低16位表示写,即   0000000000000000      0000000000000000 高16位读状态                低16位写状态          同步状态通过位运算维护状态,假设当前同步状态为S,写状态等于S & 0x0000FFFF (低16位全为1,高1 ...
AbstractQueuedSynchronizer 是一个同步器,不同并发工具类,通过内部类继承AbstractQueuedSynchronizer 方式,维护状态。 同步器通过模板模式,子类重写相应方法完成状态的维护。   同步器依赖内部的同步队列(FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及登台状态等信息构造成为一个节点(Node)并将其加入同步队列,同时阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。   同步器提供的模板方法:
ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, Thre ...
服务端:       通过listen系统调用,进入LISTEN状态,被动等待客户端连接,因此执行的是所谓的被动打开,服务器一旦监听到某个连接请求(收到同步报文段),就会将该连接放入内核等待队列中,冰箱客户端发送带SYN标志的的 ...
机器A(192.168.1.107) telnet 机器B(192.168.1.108) sudo tcpdump  -i enp0s3 -nt '(src 192.168.1.107 and dst 192.168.1.108) or (src 192.168.1.108 and  dst 192.168.1.107)' 抓包   IP 192.168.1.107.43286 > 192.168.1.108.23: Flags [S], seq 1068102909, win 29200, options [mss 1460,sackOK,TS val 788929 ecr 0, ...
       当Ip数据报的长度超过贞的MTU时,将被分片传输。IP头部中的三个字段给IP的分片和重组提供了足够的信息:数据报标识,标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移,并且除了最后的一个分片外,其他分片都将设置MF标志,此外,每个分片的IP头部的总长度字段将被设置为该片的长度。       以太网帧的MTU是1500字节,因此它携带的IP数据报的数据部分最多是1480字节(IP头部占用20字节)。考虑用IP数据报封装一个长度为1481字节的ICMP报文(包括8字节的ICMP头部,所以其数据部分长度为1473字节),则该数据报 ...
  BlockQueue提供的相关操作和特点: 方法/处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入 a

LinkedList源码(1.8)

    博客分类:
  • java
1 LinkedList() 没有任何操作,空链表 实际节点: private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.pr ...

java 线程中断

    博客分类:
  • java
import java.util.concurrent.TimeUnit; public class TestInterrupted { public static void main(String[] args) throws Exception { Thread t1 = new Thread(new TestRunner()); Thread t2 = new Thread(new TestRunner2()); //t1.setDaemon(true); t1.start(); t2.start(); TimeUnit.SECONDS ...

ArrayList 源码(1.8)

    博客分类:
  • java
1 new ArrayList() 时,将内部DEFAULTCAPACITY_EMPTY_ELEMENTDATA赋值给 elmentData数组。  2 add(E e)时,调用ensureCapacityInternal(size +1),此时size 为0,minCapacity为10,(DEFAULT_CAPACITY为10,取DEFAULT_CAPACITY和minCapacity之间最大值)。 modCount++;如果minCapacity &gt; 当前elementData.length,调用grow(minCapacity) int oldCapacity = e ...

java实现base64编码

    博客分类:
  • java
import java.util.ArrayList; import java.util.List; import org.apache.commons.codec.binary.Base64; public class MyBase64 { public static void main(String[] args) { // TODO Auto-generated method stub // char c = '0'; // int i = (int)c; // System.out.println(i); // System.out.p ...
package com.edgar; public class TestFibonacci { public static void main(String[] args) { // TODO Auto-generated method stub long start1 = System.currentTimeMillis(); System.out.println(fibonacci(40)); long end1 = System.currentTimeMillis(); long start2 = System.currentTimeMill ...

tomcat 参数

    博客分类:
  • java
-Djava.util.logging.config.file=/home/admin/secdemon/.default/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcatalina.vendor=alibaba -Djava.security.egd=file:/dev/./urandom -Dlog4j.defaultInitOverride=true -Dorg.apache.tomcat.util.http.ServerCookie.ALL ...
  网上看到的,保存一份。。 另一份Java应用调优指南之-前菜 January 1, 2016 | Filed under 工作 技术 每一次成功的调优,都会诞生又一份的调优指南。 一些必须写在前面的军规,虽然与Java应用的调优没直接关联,但是测试同学经常不留神的地方,导致应用的优化变成一场测试环境调优的闹剧。   1 独占你的测试机器 包括跑JMeter的那些机器。 "top"或者"pidstat -l 2 10" 看一下,其他的路人甲乙丙丁的应用都关干净了没。
  <html> <head> <script> function f(){ a = 1; //全局变量a赋值为1 var b = 2; 局部变量b赋值为2 } try{ alert(a); } catch(e){ alert(e.message); //变量a未定义 } f(); //调用函数 alert(a); //1 </script> </head> </html>  变量的赋值操作发生在javascript执行期,而不是预编译 ...
Global site tag (gtag.js) - Google Analytics