- 浏览: 33526 次
- 性别:
最新评论
-
xiaguangme:
写的不错,赞一个
SWT源码分析 (一)
文章列表
由于在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标志的的 ...
tcp连接建立和关闭过程
- 博客分类:
- 网络基础
机器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字节),则该数据报 ...
java阻塞队列介绍(jdk 1.8)
- 博客分类:
- java
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 ...
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 ...
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 > 当前elementData.length,调用grow(minCapacity) int oldCapacity = e ...
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 ...
-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执行期,而不是预编译 ...