`
xly_971223
  • 浏览: 1264660 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
Service CAS的Service 通常是值 sso client TGT (Ticket Grangting Ticket) TGT是个字符串存放在cookie中,cookie中有这个东东就表示用户曾经登陆成功过 TGT在sso server端对应一个TGT对象,其实就是用户信息啦。 一般都会缓存的 当用请求到sso server时会检查有无TGT cookie 并验证有效性,若有效就认为登陆过 否则 重新登陆 可以理解TGT是一个长期有效的票 比如说月票(这个月票可以供多人使用) ST(Service Ticket) 就是我们常说的Ticket 这个Ticket是一次性的 用户 ...
Future模式在jdk5中有实现 其特点是:不阻塞等待函数的执行结果,而是立即返回一个Future对象,Future对象就像一个提货单,等函数执行完成再去提货 核心类是 Host 和 FutureData public class Main { /** * @param args */ public static void main(String[] args) throws Exception{ Host host = new Host(); Data f1 = host.request(5, 'c'); Data f2 = host.reque ...
Thread per Message 意思是每个请求都启动一个新线程 最常见的就是socket server的处理模型 每来一个客户端连接 服务端就开启一个线程处理数据 这个模式共有3个类 Client  客户端 发送message Server  服务端 接收message 并启动线程处理 MessageHandler message处理类
场景: 老师在黑板上写了字,很多学生在下面读 现在老师要擦掉重写,学生们说我们还没看完呢 等我们全部看完了才能擦 这就是读写锁:没有线程读取时才能写入 看程序如何实现吧 看以看到一次完整的读取或者写入要获取两次锁,这也就是加大了读写锁的使用成本 所以读写锁用来处理一些比较耗时的计算更划算 public class ReadWriteLock { private int readerCount = 0; //读取线程数 private int writerCount = 0; //写入线程数 /** * 获取读锁时: * 已经有线程在读取 ---获取成功 ...
Thread类有几个与中断有关的方法 Thread.interrupted(); 这是个静态方法 这个方法有点不好理解,因为连续调用两次的结果可能不一样 这个方法做了两件事: 1 返回当前中断状态 2 中断状态复位为false interrupt() interrupt()方法用来中断线程,一般是由A线程来中断B线程 实例代码 main(){ Thread a = new Thread(); a.start(); ... a.interrupt(); } isInterrupted()方法会返回线程的状态 线程中断状态 java中与线程中断状态有关的方法有 wait ...
生产者/消费者模式 有两个厨师在做蛋糕(生产者)两个客人在吃蛋糕(消费者) 厨师做好了就放在桌子上,客人吃完了就从桌子上取,桌子实际上是共享队列 桌子最多能放3个蛋糕,放满了后厨师就等待 直到客人取走一个 整理后包括着几个类 MakerThread 厨师 EaterThread 客人 Table  共享队列 还有就是蛋糕了 我们用String来表示 package com.justel.fs.prod_cons; import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; /** * 生产者 ...
当现在不适合这个操作,或者没有必要进行这个操作时,就直接放弃而回去 这就是Balking Pattern 主要有4个类 Data 代表要保存的数据 SaverThread 定时存盘线程 模拟word的定时保存 ChangerThread 用户线程 模拟用户在修改文档,文档修改后这两个线程会去抢着保存到文件 Main 就是main啦 直接上代码吧 /** * @author 徐良永 * @date 2013-6-5下午5:02:38 */ public class Data { private String content; private boolean c ...
Guarded Suspension Pattern这个模式翻译过来应该叫保护性暂停模式吧 意思是:如果不停下来的话前面会有危险 这个模式有4个元素 Request   请求 RequestQueue  请求队列 ClientThread  发送请求的类 ServerThread  接收请求的类 其实有点类似生产者/消费者模式 ClientThread生产Request并放入RequestQueue ServerThread从RequestQueue 中取数据然后处理 这个模式核心代码在 入队和出队方法上 如下 public synchronized Request getRequest ...
之前从http://sunnylocus.iteye.com/blog/567374 下载了代码,实现sgip下行 在运行过程中发现实现方式及代码上有几个问题 1 线程异常退出后没有重新创建,导致无法下行 2 同步锁使用的有问题,具体看http://www.iteye.com/topic/1130674 所以就在有了现在的这个版本,修正了上面的2个问题 新的版本中 启动了一个监控线程,当发送线程数等于0时会新建发送线程 底层的协议解析代码还是使用了sunnylocus的
synchronize方法和 synchronized 块都不存在没有释放锁的问题,无论是发生异常或者中途返回 例如下面的代码,还是会正确的释放锁 void synchronized test(){ doSomething(); if(1==1)return; doSomething2(); return; } 再看下面的代码 用 lock unlock来获取 释放锁,我们会发现程序没有执行unlock就return了,这就导致锁没有被正确释放 void test(){ lock(); doSomething(); if(1==1)return; doSomething ...
说道java多线程就不能不提synchronize wait notifyAll synchronize是获取对象的锁定,当一个线程获取这个锁定后 其他线程只能等待 wait()方法是让线程休息,通常是线程要等待某个资源就绪后才能向下执行,这时调用wait()告诉线程先等着吧 值得一提的是 调用wait方法时必须获得锁 调用wait方法后,线程会被放入一个休息室,我们把它叫做wait set 示例 synchronize(this){ .... this.wait(); .... } notifyAll()方法是通知线程,告诉线程等待的资源已经就绪了,赶紧去抢吧 notifyAl ...
volatile关键字用来解决java线程之间变量的可见性 普通的java变量在线程间共享时,每个线程会拷贝一个变量副本进行读写 这就使得变量在线程间不一致 如果声明变量是加上volatile,就解决了变量不一致问题 可以这样理解:volatile告诉线程不使用变量副本
直接上代码 核心代码 EslMessage response = client.sendSyncApiCommand("sofia xmlstatus", "profile internal reg 1002"); public void sofia_contact() { Client client = new Client(); try { client.connect( host, port, password, 2 ); } ...
在voip电话中,如果主叫不在线的话就要用回拨方式实现voip通话了 回拨就要用到originate命令了 originate user/1000 &bridge(user/2000) fs会先呼通1000作为主叫,然后再去呼叫2000 实际上回拨与直拨的区别就在于主叫的接通方式,呼被叫的流程是一样的 直拨发起呼叫时建立起会话,然后转入dialplan的extension 回拨是在主叫接通时建立起会话,然后转入dialplan的extension 建立会话之后呼被叫的流程是一样的 originate是这样来实现的 originate user/1000 2000 XML d ...
freeswitch安装后默认只允许内网用户连接8021端口的 配置如下 <settings> <param name="nat-map" value="false"/> <param name="listen-ip" value="127.0.0.1"/> <param name="listen-port" value="8021"/> <param name="pas ...
Global site tag (gtag.js) - Google Analytics