可重入锁对socket.read不好使的问题
来源:互联网 发布:工商银行软件官方下载 编辑:程序博客网 时间:2024/05/18 00:12
先写一个愚蠢的错误让大家开心开心,本来想所run里面的逻辑的,你这能锁住???搞笑一样。。。。。。。
synchronized(this){ new Thread(new Runnable() { public void run() { .................. } }).start(); //大哥,里面是一个 Thead.start你怎么锁的住啊,大哥!!!!!!!!!!!!!!!!!!!!!!}
言归正传,下面的代码对run里面的代码进行了加锁,但是线程在获取锁的过程中是无法中断的,而socket.read会一直阻塞线程,导致锁无法被释放,其他线程无法执行run方法。
new Thread(new Runnable() { public void run() { synchronized (Bluetooth.this){ //注意这个地方是锁外部类,而不是this,this是Thread!!!! socket.read() //synchronized保证指令顺序执行 } }}).start();
博主采用了handler的postDelay和remmoveCallback 来实现当read方法阻塞的时候,把已经读取的网络数据post到主线程。但是这并没有解决read阻塞导致后续线程无法获得锁的问题,(socket.close()会使read方法抛出java.io.IOException: bt socket closed, read return: -1 ,从而解除阻塞)
myHandler = new Handler(Looper.getMainLooper());myHandler.postDelayed(myRunnable, 1000);readCount += in.read(b, readCount, count - readCount);myHandler.removeCallbacks(myRunnable);
最终灵感突现,想到了ReentrantLock (可重入锁,终于明白啥叫可重入了。。。。)
socket.read这么NB,可重入锁(超时可重入)都不能使它结束阻塞??
java 显式锁ReentrantLock使用详解之测试锁与超时
阅读全文
0 0
- 可重入锁对socket.read不好使的问题
- phpexcel 导出不好使的问题
- 如何解决wxFrame的key event不好使的问题。
- myeclipse Alt+Shift+F不好使的问题
- 解决putty上vi小键盘不好使的问题
- 解决putty上vim小键盘不好使的问题
- lpc1768的iap不好使
- 测试一下CSDN的博客好使不好使
- chrome右键百度不好使问题
- 解决远程桌面剪切板不好使问题
- 关于socket的readLine和read问题
- Netty与java Socket通信不太好使
- CSDN的Edit真是不好使
- 工控网的博客不好使,回归CSDN
- csdn的文章分类不好使啊
- vc - dumpbin命令不好使的解决办法
- Server.UrlEncode 不好使的时候
- 火狐中,selected的变动不好使
- HDU1823 Luck and Love(二维线段树单点更新+区间查询+模板)
- angular 动态组件
- RFS 工作环境搭建记录
- 《西瓜书》笔记11:特征选择与稀疏表示(三)
- JAVA开发的23种设计模式之 --- 单例模式
- 可重入锁对socket.read不好使的问题
- UVC协议USB视频捕获设备定义
- IO流(缓冲流)
- 一本书的学习
- Achain迎来众多合作伙伴 共建社区生态发展
- 序
- react-redux使用小结
- 51单片机中使用ucos ii的优缺点
- NYOJ 59-小明组织活动的任务(置换)