Java SE specials

本文探讨了Java中关于线程、并发的关键概念和技术细节,包括Object.wait的使用及其改进、Condition.await的精确超时机制、中断标记的作用及检查方式、构造函数的工作原理等,并涉及了ByteBuffer的字节序选择和SocketChannel的正确使用方法。

 

1.在jdk1.5之前,Object.wait函数没有timeout返回标识,

e.g:

   long t=System.currentTimeMillis();
   obj.wait(timeout);
   if(System.currentTimeMillis()-t>=timeout)
    ......

如此标识timeout是 粗略的.

 

现在的java util concurrent下的 Condition.await函数是可以标识timeout的,

e.g:

     if(!cond.await(timeout, TimeUnit.MILLISECONDS))
     ......;//timeout.

     if(cond.awaitNanos(nanosTimeout)<=0) //timeout.

 

 

2.pls see :http://adapterofcoms.iteye.com/blog/615200

在运行时,你能修改[final int target=911]target的值吗?确实比c安全,[const int tag=911]tag的值能改!而且只需2行代码.

 

3.Thread.currentThread().interrupt();添加interrupt标记,

     线程如果调用wait等函数将throw InterruptedException,并清除interrupt标记.

     Thread.currentThread().isInterrupted();//不会清除interrupt标记,只是查询.
     Thread.interrupted();//如果标记了就清除.

4.try{
   return true;
  }finally{
   return false;
  } 你如果能看穿上面代码的本质,你就真的很懂java了. 

5.java.lang.Integer.IntegerCache

如何比较Integer,是==,还是equals ??????

6.构造函数的本质,和成员变量(当然是non-static的)的初始化顺序.

构造函数的调用过程为 new instance----->initialize()[<---这个才是编译后的真正的构造函数]----->对构造函数之外的成员变量进行初始化(如果需要).

Java构造时成员初始化的陷阱<--其实没陷阱.

7.nio ByteBuffer ByteOrder.BIG_ENDIAN or LITTLE_ENDIAN ????? socket programming

一般linux[ubuntu]都是 LITTLE_ENDIAN

8.SocketChannel的获得:SocketChannel.open() 而不是Socket.getChannel() return null !!!!!!

9.如果socket是block的,使用SocketChannel在w/r时 都需要while   ,if to total_w/r_size break

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值