junique学习记录

工作中遇到到了一个程序实例每次只能有一个实例访问,好好研究下代码没有思路,虎哥(很牛的专家)说有一个轻量级的jar包可以实现实例的互斥访问,下载源代码学习一下:

 

下面是学习笔记,与junique好似没有关系,算是java基础知识的巩固吧!

1、  获取类名字方法:

    String id = CLASSNAME.class.getName();

2、  Java套接字编程知识点

服务端: 首先创建ServerSocket,负责接收客户连接请求。专门侦听多个客户端的连结请求。操作系统会把连结请求存储在一个先进先出的队列中,当队列请求达到最大量时候,拒绝新的连接请求。这时候服务端可以通过ServerSocket.accept方法从队列中取连接请求,使队列腾空。

 

客户端:通过使用Socket构造方法发送请求加入服务端的队列中;

 

ServerSocket.accept方法从连接请求队列中取出一个客户的连接请求,然后创建与客户连接的socket对象,并将它返回。如果没有连接请求,accept方法就会一直等待,直到收到了连接请求才返回。接下来,服务端从socket对象获得输入流和输出流,就能与客户端进行通讯。

 

多线程服务器解决并发问题:为每个客户分配一个线程,创建一个线程池,由它来为客户服务。线程池中预先创建一些工作线程,他们不断的从工作队列中取出任务,然后执行任务。当工作线程执行完一个任务后,就会继续执行工作队列中的下一个任务。可以直接继承ThreadGroup实现线程池的创建。JDK类库提供了现成的包java.util.concurrent实现线程池,可以直接使用。

 

使用线程池的注意事项:

死锁、系统资源不足、并发错误、线程泄露[l1] 

 


 [l1](对于工作线程数目固定的线程池,如果工作线程在执行任务时抛出RuntimeException Error,并且这些异常或错误没有被捕获,那么这个工作线程就会异常终止,使得线程池永久失去了一个工作线程。如果所有的工作线程都异常终止,线程池就最终变为空,没有任何可用的工作线程来处理任务。 )

 

 

 

 

学习心得:

 

对一个大的工程,一定不要上来就进入研究代码细节,容易进入"只见树木,不见森林"的尴尬境地,要学习时下流行的工业标准和潮流,用设计模式的思维首先把工程的整个包研究下,可以在纸上划出各个类间的关系,然后研究它们之间的耦合性,多问几个为什么。以便对整个包有个概括性的了解,在这个基础上,再去深入研究优秀的开源代码中的精华才是一种不错的学习方法。

 

 

 junique jar包学习过程经验有待于总结,并逐步养成好的习惯,要熟知包的接口,熟悉各个类间的依赖关系和耦合性,在此基础上研究代码中精华细节,junique 中核心api接口如下:

 

Method Summary
static voidacquireLock(java.lang.String id)
          This method tries to acquire a lock in the user-space for a given ID.
static voidacquireLock(java.lang.String id, MessageHandler messageHandler)
          This method tries to acquire a lock in the user-space for a given ID.
static voidreleaseLock(java.lang.String id)
          It releases a previously acquired lock on an ID.
static java.lang.StringsendMessage(java.lang.String id, java.lang.String message)
          It sends a message to the JVM process that has previously locked the given ID.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值