java
文章平均质量分 67
Runyon1982
擅长Java、C++,全栈开发者
展开
-
如何解决多线程程序中的死锁问题
经常在技术论坛上看到有人虎目含泪地向人哭诉被多线程程序中的死锁问题搞得欲死欲仙,最后扔下狠话:再不用多线程了,要用多进程。 的确,死锁问题是一个比较令人头痛的问题:难重现,难调试,又相对隐蔽。但是因此把多线程一把拍死还是过于武断了:多线程在数据共享方面比多进程方便多了;有些高性能场合必须多线程如epoll服务器;很多语言没有提供多进程的直接支持如Java。而且很多强大健壮的服务是用多线程原创 2015-10-10 09:21:56 · 670 阅读 · 0 评论 -
SQLite批量插入Android代码示例
参考之前博文:《如何向SQLite批量插入大量记录和其他一些使用心得》------------------------------代码的分割线---------------------------importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteStatement;pu原创 2015-10-10 09:23:42 · 400 阅读 · 0 评论 -
版本号的比较函数
网上搜索了下,没发现太好的实现,于是自己实现了。原理就是按点号切割字符串后从前往后转换成数字进行比较,所以 2.11.3 > 2.6.2(如果直接比较字符串,结果是错误的) 。可以支持不同长度的版本号比较, 1.2.3 > 1.2。不支持带数字的版本号进行比较,比如 1.2.3a vs1.2.3b,会直接异常( Integer.valueOf方法扔异常)。如果有此需求应该自己实现版本比原创 2015-10-10 09:23:55 · 938 阅读 · 0 评论 -
小工具:批量转换文件夹下的特定类…
网上没找到好的,于是自己用Java写了个小工具。=======================代码的分割线=============================import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream原创 2015-10-10 09:23:28 · 267 阅读 · 0 评论 -
可去重的消息队列:AntiDuplicateL…
LinkedBlockingQueue经常用于线程间的消息队列。一个或多个消费者线程阻塞在take操作,生产者线程往队列里面offer新的消息。有时候,可能希望不要在队列中有重复的请求。我实现的AntiDuplicateLinkedBlockingQueue可实现此目的。代码很简单,就是用一个LinkedList来实现队列,一个HashSet来实现去重。====================原创 2015-10-10 09:23:16 · 7217 阅读 · 0 评论 -
怎么在eclipse中打开Android的samp…
一般在eclipse里打开Java工程,是通过import - General - Existed Project IntoWorkspace来进行的。但安卓的sampleprojects比较奇怪,居然都没有提供project文件。那要怎么打开呢? 随便Google下就知道了,可以通过new - Android - Android SampleProject的方式来打开这些例子工程。原创 2015-10-10 09:22:30 · 490 阅读 · 0 评论 -
Java中自定义枚举(Enum)项的值及…
C++中定义枚举的时候可以直接指定枚举项的值,如:"enum {MAX_LENGTH =255};"。其实Java也可以,今天学到了这种语法。C++的int和枚举互相转换使用强制类型转换即可,但在Java中从int构造Enum需要自己实现(不过如果枚举值从0开始递增就简单了,参考第二段代码)。自定义枚举值代码如下:==============================代码的分割线===原创 2015-10-10 09:22:28 · 1527 阅读 · 0 评论 -
java中的省略参数
省略参数(不确定个数参数)函数,我一直以为是c语言时代的老古董。利用中的va_list、va_start、va_arg、va_end宏。艰难地瞎搞出所需要的参数。同时祈祷调用者要有良心别胡来,还要聪明到能理解正确的调用方式。对于如此难受的编程方式,我还是敬谢不敏。《TCPL》中说:这种函数适用于对参数的个数和类型都不确定的情况。谢天谢地,我从没有遇到这种情况。 今天在很偶然的场合居然发现ja原创 2015-10-10 09:17:51 · 1898 阅读 · 0 评论 -
发现自己土了: java运行时指定虚…
java的reader类的子类们在构造时如果没有指定Charset,将采用系统默认字符集。比如windows一般是gbk,ubuntu上是utf8。由于自然语言处理方面的工作常需要处理各种格式的文本。所以我写的程序常常可以让用户指定Charset:从命令行参数获取该值用于构造reader类。今天发现java运行时是可以指定虚拟机默认字符集的。顿时觉得自己暴土无比,奇土无比。以前我有猜到应该要有这种原创 2015-10-10 09:17:49 · 307 阅读 · 0 评论 -
备忘:java中如何从文件中读写大量…
读写大量原始类型数据时,如果当作普通String写入文件,读出时再来parse,速度无法忍受。以下主要讨论读,因为读写是对称的。 以前我用FileInputStream,在内存中弄一个很大的byte数组,读入后自己瞎搞拼装成int之类。现在发现其实完全没必要,java的io做得很完善方便了。DataInputStream里就有readInt,readFloat等方法。如果文件很大缓存不够会原创 2015-10-10 09:17:46 · 298 阅读 · 0 评论 -
Camera的release方法导致VM crash…
今天编程按部就班地抄袭devguide,基本ok。就是release Camera后vmcrash了。google发现:http://code.google.com/p/android/issues/detail?id=6201。 如果懒得看英文,就记住:调用Camera对象的release之前,先调用xxx.setPreviewCallback(null);,这样就可以了。原创 2015-10-10 09:22:35 · 574 阅读 · 0 评论 -
Java中条件变量使用示例及性能测试
和前篇文章一样的目的,测试结果也差不多,不过java中的条件变量效率略高于boost,结果是每秒大概20w出头。===================================================================================package com.cc;public class Test { staticboole原创 2015-10-10 09:20:47 · 422 阅读 · 0 评论 -
使用JavaMail发送邮件时判断发送结…
1、获取邮件发送结果 网上看大多数例子,都是调用Transport类的sendMessage方法后就收工了。但sendMessage方法没有返回值的,而且是一个异步的方法(也就是函数调用结束的时候邮件的发送过程并未结束)。我们可以通过Transport的addTransportListener方法增加邮件发送结果的Listener,Listener接口有三个方法:void message原创 2015-10-10 09:24:17 · 12104 阅读 · 2 评论 -
如何正确调用getLocationInWindow/…
这两个函数可以获得View在Window和Screen中的位置。Screen是整个屏幕,不属于应用的状态条也计算在内。 但我一开始调用这两个函数的时候返回的数组总是{0,0}。没办法,先找Reference,没内容。Google找到了,说调用这两个函数的时候必须保证布局已完成。经我测试:在onCreate/onStart/onResume的时候,都不能成功。 继续google,原创 2015-10-10 09:22:40 · 1564 阅读 · 0 评论 -
Android用JavaMail发送邮件
有一个需要:当Android程序异常退出的时候把日志啊、堆栈信息整成一个邮件,发给指定邮箱。粗一搜都是用Intent的方式——但这不符合我们的需要,我们并不需要使用用户的邮箱来发送,也不关心用户是否有配置邮箱,只要用户能上网,直接把smtp报文扔给服务器即可。 传统Java程序如果想达到这个目的,可以使用JavaMail,但直接把代码撸来,发现Androidsdk中没有javax.ma原创 2015-10-10 09:22:37 · 410 阅读 · 0 评论 -
Android2.2 Socket关闭Bug的解决方…
Android2.2有一个Bug:调用Socketclose方法后,阻塞在Socket读上的线程不会抛出IOException,而是继续阻塞(http://code.google.com/p/android/issues/detail?id=7933)。这对于非echo类的TCP应用来说可能是致命的。因为一种通常做法是socket连接后,建立一个线程专门来接收数据。socket关闭,接收线程阻塞原创 2015-10-10 09:22:32 · 502 阅读 · 0 评论 -
RabbitMQ使用不当导致的队列堵塞问题及解决办法
本接盘侠接手的一个服务使用RabbitMQ和其他服务进行消息传输。接手后发现:有时候RabbitMQ中明明有元素,但是不会回调DefaultConsumer的handleDelivery函数,于是队列无法消化,越堵越长。通过jstack查看,发现rabbitmq消费者线程堵塞在socketinputstream的socketRead0函数。通过搜索,发现这篇文章:《Queue consumer原创 2015-10-14 21:03:13 · 30004 阅读 · 0 评论