paulwong

#

HIBERNATE SHARD

数据上千万,都挤在一个表里,导致查询太慢?分库分表洛!但已经用了HIBERNATE了,不想转其他框架?用HIBERNATE SHARD!

在向大家详细介绍Hibernate Shard三种策略之前,首先让大家了解下Hibernate Shard简介,然后全面介绍Hibernate Shard三种策略。

1. Hibernate Shard简介
Hibernate Shard多数据库水平分区解决方案。Hibernate 的一个扩展,用于处理多数据库水平分区架构。由google工程师 2007年 捐献给 Hibernate社区。目前版本: 3.0.0 beta2, 未发GA版。条件:Hibernate Core 3.2, JDK 5.0

2. 水平分区原理
一个库表如 Order 存在于多个数据库实例上。按特定的分区逻辑,将该库表的数据存储在这些实例中,一条记录的主键 PK,在所有实例中不得重复。水平分区在大型网站,大型企业应用中经常采用。目的出于海量数据分散存储,分散操作,分散查询以便提高数据处理量和整体数据处理性能。使用:google工程师的设计还是非常好的,完全兼容 Hibernate本身的主要接口。
org.hibernate.Session  
  org.hibernate.SessionFactory  
  org.hibernate.Criteria  
  org.hibernate.Query 

因此程序员开发变化不大,甚至不需要关心后台使用了分区数据库。程序迁移问题不大。而且配置上比较简明。

3. Hibernate Shard三种策略:
◆ShardAccessStrategy, 查询操作时,到那个分区执行。默认提供两个实现:
顺序策略:SequentialShardAccessStrategy, 每个query按顺序在所有分区上执行。
平行策略:ParallelShardAccessStrategy, 每个query以多线程方式并发平行的在所有分区上执行。此策略下,需要使用线程池机制满足特定的性能需要,java.util.concurrent.ThreadPoolExecutor.

◆ShardSelectionStrategy, 新增对象时,存储到哪个分区。框架默认提供了一个轮询选择策略 RoundRobinShardSelectionStrategy, 但一般不这样使用。通常采用“attribute-based sharding”机制,基于属性分区。一般是用户根据表自己实现一个基于属性分区的策略类ShardSelectionStrategy ,例如,以下WeatherReport基于continent属性选择分区:  
public class WeatherReportShardSelectionStrategy implements ShardSelectionStrategy {  
public ShardId selectShardIdForNewObject(Object obj) {  
if(obj instanceof WeatherReport) 
{  
return ((WeatherReport)obj).getContinent().getShardId();  
}
  
throw new IllegalArgumentException();  
}
 

◆ShardResolutionStrategy, 该策略用于查找单个对象时,判断它在哪个或哪几个分区上。默认使用 AllShardsShardResolutionStrategy ,可以自定义例如:  

public class WeatherReportShardResolutionStrategy extends AllShardsShardResolutionStrategy
{
public WeatherReportShardResolutionStrategy(List<ShardId> shardIds)
{
super(shardIds);
}


public List<ShardId> selectShardIdsFromShardResolutionStrategyData( ShardResolutionStrategyData srsd)
{
if(srsd.getEntityName().equals(WeatherReport.class.getName()))
{
return Continent.getContinentByReportId(srsd.getId()).getShardId();
}

return super.selectShardIdsFromShardResolutionStrategyData(srsd);
}

}

posted @ 2012-01-04 22:40 paulwong 阅读(890) | 评论 (0)编辑 收藏

Webx-淘宝的框架

淘宝的一个框架:
Webx:http://openwebx.org/docs/preface.html

代码下载:
https://github.com/webx/citrus

posted @ 2012-01-04 22:04 paulwong 阅读(1234) | 评论 (0)编辑 收藏

MyEclipse详解及MyEclipse7.5的优化

  这篇文章本要讲了两方面的内容
第一:对MyEclipse的解释,让您更加细致准确的了解MyEclipse,
第二:对
MyEclipse7.5的优化
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。MyEclipse是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。
  在结构上,MyEclipse的特征可以被分为7类:
1. J2EE模型
2. WEB开发工具
3. EJB开发工具
4. 应用程序服务器的连接器
5. J2EE项目部署服务
6. 数据库服务
7. MyEclipse整合帮助
  对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
  简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。

MyEclipse7.5的优化
1、去除不需要加载的模块 一个系统20%的功能往往能够满足80%的需求,MyEclipse也不例外,我们在大多数时候只需要20%的系统功能,所以可以将一些不使用的模块禁止 加载启动。通过Windows - Preferences打开配置窗口,依次选择左侧的General - Startup and Shutdown,这个时候在右侧就显示出了Eclipse启动时加载的模块,可以根据自己的实际情况去除一些模块。
windows–>perferences–>general–>startup and shutdown
关掉没用的启动项:
WTP :一个跟myeclipse差不多的东西,主要差别是 WTP 是免费的,如果使用myeclipse,这个可以取消
Mylyn:组队任务管理工具,类似于 CVS ,以任务为单位管理项目进度,没用到的可以取消
Derby:一种保存成 jar 形式的数据库,我没用到,取消一大排以 MyEclipse EASIE 打头的启动项:myeclipse 支持的服务器,只选自己用的,其他取消,比如我只选了tomcat6.x


2、取消MyEclipse在启动时自动验证项目配置文件
默认情况下MyEclipse在启动的时候会自动验证每个项目的配置文件,这是一个非常耗时的过程,
可以在Preferences窗口依次选择 MyEclipse Enterprise Workbench - Validation,然后在右侧的Validator列表中只保留 Manual 项就可以了(Manual全部勾选,Bulid项只留下第一项)。
如果需要验证的时候只需要选中文件,然后右键选择 MyEclipse - Run Validation就可以了。
windows–>perferences–>myeclipse–>validation
把除了manual 下面的全部点掉,build下只留 classpath dependency Validator
手工验证方法: 在要验证的文件上,单击鼠标右键–>myeclipse–>run validation

3、去掉拼写检查(如果你觉的有用可以不去)
拼写检查会给我们带来不少的麻烦,我们的方法命名都会是单词的缩写,他也会提示有错,所以最好去掉,没有多大的用处:
windows–>perferences–>general–>validation->editors->Text Editors->spelling
myeclipse 打开 jsp 的默认编辑器不好,会同时打开预览
windows–>perferences–>general–>editors->file associations,
把默认改成 MyEclipse JSP Editor()
原默认的jsp编辑器是 MyEclipse Visual JSP Designer,顾名思义,此编译器是jsp可视化编辑器,对于初学者有很多的帮助,但修改此项的默认编辑器其实可以提高启动速度)


4、关闭自动更新
如果是myeclipse7.5:
(1)关掉maven自动更新: window-preferences-MyEclipse Enterprise Workbench-Maven4MyEclipse-Maven, 关闭所有Download和Update开头的选项,共四项(去掉前面的勾)
(2)关闭更新调度:window –> preferences –> General –> Startup and Shutdown –> Automatic Updates Scheduler(去掉前面的勾)
(3)window –> preferences –>Myeclipse Dashboard,关闭Show……on start

5、加大JVM的非堆内存
打开 myeclipse.ini
-startup
../Common\plugins\org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar
--launcher.library
../Common\plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.101.R34x_v20080731
-clean
-configuration
configuration
-vm
C:\Users\lenovo\AppData\Local\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\client\jvm.dll
-vmargs
-Xmx384m
-XX:MaxPermSize=384m
-XX:ReservedCodeCacheSize=96m
以上是我的myeclipse.ini,需要修改是-Xmx,-XX:MaxPermSize,-XX:ReservedCodeCacheSize,
将这三项的值调大,但并不是越大越好,曾经在相同的条件下做过测试(内存2GB),-Xmx,-XX:MaxPermSize的值为384m时比512m时要快(视具体的计算机而定),
-Xmx,-XX:MaxPermSize的值设为同样大小且两者之和不能超出你的计算机本身的内存大小


6、window-preferences-MyEclipse Enterprise Workbench-Maven4MyEclipse-Maven,将Maven JDK改为电脑上安装的JDK,即不使用myeclipse提高的JDK
登记add按钮,选择你的电脑上的JDK即可(注意:不是JRE,我的值为:Java6.014)

posted @ 2012-01-03 23:38 paulwong 阅读(271) | 评论 (0)编辑 收藏

Watij and Maven

By the way, I did this "by hand" and got it working.

First, download the waitj bundle and unzip it.

Then, use maven to manually install each dependency in the lib folder
like so:
mvn install:install-file -Dfile=webspec.jar -DartifactId=webspec -
DgroupId=watij -Dversion=1.3.1 -Dpackaging=jar

You can also do deploy:deploy-file if you want to put them into a
central maven repo.

Of course, you don't need to do this for log4j, junit, slf4j. I did
it for all the others for speed, registering them under "watij" and
version 1.3.1

Got this working in Eclipse, a simple login test case, yipee!

Here is the POM snippet for my project:

  <dependencies> 
    
<dependency> 
      
<groupId>junit</groupId> 
      
<artifactId>junit</artifactId> 
      
<version>4.8.2</version> 
      
<scope>test</scope> 
    
</dependency> 


    
<!-- WATIJ --> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>webspec</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>engine-gecko</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>engine-ie</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>engine-webkit</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>jniwrap-native</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>jxbrowser</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>MozillaGlue</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>MozillaInterfaces</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>mshtml</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>runtime</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>tuxpack</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>winpack</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>xulrunner-linux</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>xulrunner-linux64</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>xulrunner-mac</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>watij</groupId> 
      
<artifactId>xulrunner-windows</artifactId> 
      
<version>1.3.1</version> 
    
</dependency> 


    
<dependency> 
      
<groupId>log4j</groupId> 
      
<artifactId>log4j</artifactId> 
      
<version>1.2.15</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>org.slf4j</groupId> 
      
<artifactId>slf4j-api</artifactId> 
      
<version>1.5.8</version> 
    
</dependency> 
    
<dependency> 
      
<groupId>org.slf4j</groupId> 
      
<artifactId>slf4j-log4j12</artifactId> 
      
<version>1.5.8</version> 
    
</dependency> 



posted @ 2012-01-03 22:08 paulwong 阅读(809) | 评论 (0)编辑 收藏

Watij入门

     摘要: Watij介绍 Javadoc API for Watij: http://watij.sourceforge.net/docs/api/index.html?watij/IE.html 第三章 Watij环境设置 3.1 Watij环境要求 l Watij 3.2.1 l JDK 1.5 l Java IDE(本文中使用Eclipse) 3.2 Watij安装及设置 l 下载软...  阅读全文

posted @ 2012-01-03 22:01 paulwong 阅读(2344) | 评论 (0)编辑 收藏

了解CMS(Concurrent Mark-Sweep)垃圾回收器

1.总体介绍:

CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。

2.CMS过程:

  • 初始标记(STW initial mark)
  • 并发标记(Concurrent marking)
  • 并发预清理(Concurrent precleaning)
  • 重新标记(STW remark)
  • 并发清理(Concurrent sweeping)
  • 并发重置(Concurrent reset)
初始标记 :在这个阶段,需要虚拟机停顿正在执行的任务,官方的叫法STW(Stop The Word)。这个过程从垃圾回收的"根对象"开始,只扫描到能够和"根对象"直接关联的对象,并作标记。所以这个过程虽然暂停了整个JVM,但是很快就完成了。
并发标记 :这个阶段紧随初始标记阶段,在初始标记的基础上继续向下追溯标记。并发标记阶段,应用程序的线程和并发标记的线程并发执行,所以用户不会感受到停顿。
并发预清理 :并发预清理阶段仍然是并发的。在这个阶段,虚拟机查找在执行并发标记阶段新进入老年代的对象(可能会有一些对象从新生代晋升到老年代,或者有一些对象被分配到老年代)。通过重新扫描,减少下一个阶段"重新标记"的工作,因为下一个阶段会Stop The World。
重新标记 :这个阶段会暂停虚拟机,收集器线程扫描在CMS堆中剩余的对象。扫描从"跟对象"开始向下追溯,并处理对象关联。
并发清理 :清理垃圾对象,这个阶段收集器线程和应用程序线程并发执行。
并发重置 :这个阶段,重置CMS收集器的数据结构,等待下一次垃圾回收。  

CSM执行过程:
 


3.CMS缺点

  • CMS回收器采用的基础算法是Mark-Sweep。所有CMS不会整理、压缩堆空间。这样就会有一个问题:经过CMS收集的堆会产生空间碎片。 CMS不对堆空间整理压缩节约了垃圾回收的停顿时间,但也带来的堆空间的浪费。为了解决堆空间浪费问题,CMS回收器不再采用简单的指针指向一块可用堆空间来为下次对象分配使用。而是把一些未分配的空间汇总成一个列表,当JVM分配对象空间的时候,会搜索这个列表找到足够大的空间来hold住这个对象。
  • 需要更多的CPU资源。从上面的图可以看到,为了让应用程序不停顿,CMS线程和应用程序线程并发执行,这样就需要有更多的CPU,单纯靠线程切换是不靠谱的。并且,重新标记阶段,为空保证STW快速完成,也要用到更多的甚至所有的CPU资源。当然,多核多CPU也是未来的趋势!
  • CMS的另一个缺点是它需要更大的堆空间。因为CMS标记阶段应用程序的线程还是在执行的,那么就会有堆空间继续分配的情况,为了保证在CMS回收完堆之前还有空间分配给正在运行的应用程序,必须预留一部分空间。也就是说,CMS不会在老年代满的时候才开始收集。相反,它会尝试更早的开始收集,已避免上面提到的情况:在回收完成之前,堆没有足够空间分配!默认当老年代使用68%的时候,CMS就开始行动了。 – XX:CMSInitiatingOccupancyFraction =n 来设置这个阀值。
总得来说,CMS回收器减少了回收的停顿时间,但是降低了堆空间的利用率。

4.啥时候用CMS

如果你的应用程序对停顿比较敏感,并且在应用程序运行的时候可以提供更大的内存和更多的CPU(也就是硬件牛逼),那么使用CMS来收集会给你带来好处。还有,如果在JVM中,有相对较多存活时间较长的对象(老年代比较大)会更适合使用CMS。

posted @ 2012-01-03 20:31 paulwong 阅读(738) | 评论 (0)编辑 收藏

JBOSS远程代码执行漏洞

  JBOSS默认配置会有一个后台漏洞,漏洞发生在jboss.deployment命名空间 中的addURL()函数,该函数可以远程下载一个war压缩包并解压访问http://www.safe3.com.cn:8080/jmx-console/ 后台,如下图   下拉找到如下图所示     点击flavor=URL,type=DeploymentScanner进入 在输入框中写入war压缩文件webshell的url地址,如上图点击invoke执行界面获得一个jsp的webshell,如下图  
临时漏洞修补办法:给jmx-console加上访问密码
1.在 ${jboss.server.home.dir}/deploy下面找到jmx-console.war目录编辑WEB-INF/web.xml文件 去掉 security-constraint 块的注释,使其起作用
2.编辑WEB-INF/classes/jmx-console-users.propertiesserver/default/conf/props/jmx-console-users.properties (version >=4.0.2)和 WEB-INF/classes/jmx-console-roles.properties 或server/default/conf/props/jmx-console-roles.properties(version >=4.0.2) 添加用户名密码
3.编辑WEB-INF/jboss-web.xml去掉 security-domain 块的注释 ,security-domain值的映射文件为 login-config.xml (该文件定义了登录授权方式)

posted @ 2011-12-31 11:28 paulwong 阅读(787) | 评论 (0)编辑 收藏

多线程笔记

1、同步
线程初始化时,可以向线程传入对象,就存在多条同类型的线程存取同一对象,带来对象的值不同步的问题。
JVM方案,采用锁机制,线程的run代码里,使用同步关键字,同步该对象,由于一个对象只有一个锁,没取得锁的线程,就只能处于等待的状态了,run方法执行完,则锁就被释放了,下一个线程是哪个,不确定,由他们进行竞争锁,谁取得,谁就可以先上。

2、wait()
这是Object的方法,执行这个对象的wait()方法并不是去执行该对象里面的wait方法,而是通知JVM暂停锁定了该对象的线程的run方法,进入等待状态,同时也释放该锁,使得另外的同类线程有机会执行

3、synchronized
在方法前加synchronized,相当于线程的run方法中先同步资源对象,再且仅执行一个该方法。

4、start()
调用线程的start方法,并不会立即执行run方法,而是由JVM决定JVM里那一堆线程,哪个先执行,再执行run方法

posted @ 2011-12-29 01:26 paulwong 阅读(215) | 评论 (0)编辑 收藏

聖誕禮物來了!iPhone / iPad iOS 5.0.1 簡單完美 Jailbreak



  这是一份历尽千辛万苦,迟来却依旧让人无比激动的圣诞礼物。就在大约1个小时之前,Pod 2g的博客终于迎来了更新,标题更是醒目的“A4 release”,等待终于结束了。

  Pod 2g在博客中称,基于他的研发成果,Chronic Dev Team(带头大哥p0sixninja,代表作绿毒)和iPhone Dev Team(带头大哥肌肉男,代表作红雪)经过测试后,于今天正式发布A4设备的iOS 5.0.1完美越狱

  无论是已经不完美越狱的用户,还是从未使用RedSn0w越狱的用户,均可使用本次越狱方案进行完美越狱。支持设备:iPhone 3GS/4,iPad1代,iPod touch 3/4。与此同时,Pod 2g建议大家在苹果发布iOS 5.0.2时不要升级,以免越狱漏洞被封堵。

        越狱工具下载,请点击跳转。

  使用最新版RedSn0w完美越狱iOS 5.0.1教程:

  首先当然是要将手上的设备升级到iOS 5.0.1了。向小白温馨提示:不要直接连接iTunes之后点击升级5.0.1,因为这样一来设备上的部分软件还会保留,不利于后面的越狱。正确做法:直接通过iTunes安装苹果官方的5.0.1固件即可。



第一步:从我们给出的链接地址下载Mac/Windows版RedSn0w 0.9.10b1。解压后打开redsn0w.exe,点击Jailbreak。



第二步:此时要确保需要越狱的设备与电脑连接,点击Next



第三步:进入DFU模式。具体操作方法RedSn0w已经给出:先按电源键三秒左右,等待跳转之后再按下Home键,此时不要放开电源键,再次跳转之后放开电源键,Home键保持不动。



第四步:最后放开Home键之后就是验证设备和准备越狱的过程了,需要花上一点时间。




第五步:验证完成后,出弹出以下图框,第一个打勾选项为安装Cydia,此时点击Next。这时候RedSn0w会上传RAM Disk和Kernel,最后就是进行越狱了,整个过程估计耗时5分钟左右。




第六步:此时iPod touch 4(iOS 5.0.1)已完美越狱

  iOS 5.0.1完美越狱方法2:

  以上是使用最新版本的RedSn0w v0.9.10b1进行的完美越狱。假如你的设备之前已经升级iOS 5.0.1,并且已通过RedSn0w进行过不完美越狱,那么这里还有一种来自绿毒团队Chronic Dev Team的方法,支持iPhone 3GS/4, iPhone 4 CDMA, iPad 1, iPod touch 3/4。这种方法更为简单直接:



第一步:进入Cydia,搜索到Corona Untether 5.0.1

第二步:点击安装,Cydia会帮你完成接下来的工作

没有第三步了。

  完美越狱完成,你现在已经可以安全重启这些设备了。

  Cydia成功出现在iOS 5.0.1系统当中,还只是第一步而已。各位在越狱之后,先不要急着进入Cydia,因为Cydia在IOS5.0+的固件下,添加源会闪退,以下是处理方法:

  点击设备中的设置→通用→多语言环境→语言中,选择English(英文),进入英文环境。这时候Cydia不会出现闪退,所以可以在这个时候添加源。

  加入源的步骤如下:

第一步:点击下方Manage(管理),进入Source(软件源)



第二步:点击右上方Edit(编辑)



第三步:点击左上方Add(加入)



第四步:弹入方框后输入apt.weiphone.com(威锋源)后,点击Add Source(加入软件源)



第五步:如果弹出一个警告窗口,请无视它,点击Add Anyway(仍然加入),之后就会进入源的安装中了。



第六步:安装完成之后,点击右下的Search(搜索),输入afc2,就会出现一个叫做“afc2服务补丁”的文件。



第七步:点击进入“afc2服务补丁”的文件之后,点击右上的Install(安装),跳转页面之后在点击右上角的Confirm,之后就是安装文件了。



第八步:到了这步,大家可以下载iFunBox了(iFunBox下载地址请点击跳转)。下载完成后,打开iFunBox,选择路径文件系统/var/mobile/Library中找到Keyboard文件夹,并将其拖出桌面。



第九步:然后再选择路径文件系统/var/root/Library,将桌面的Keyboard文件夹拖入其中。



   OK了,完成这步之后,就解决了你在简体中文环境下,iOS5.0+系统使用Cydia崩溃的情况。之后就能在切换回简体中文了。最后可不要忘了安装 AppSync for iOS 5.0,只要在搜索中搜索就能看见,点击安装之后就能安装破解过后的后缀名为ipa的软件了。



  最后,我们仍然要再次重申的是,本次越狱仅支持iOS 5.0.1。大神的博客里写得很清楚了,5.0的完美越狱目前还在测试之中,相信不久之后就会放出。另外,两个版本的越狱都不支持iPhone 4S和iPad 2,希望大家注意了。

posted @ 2011-12-28 00:02 paulwong 阅读(381) | 评论 (0)编辑 收藏

Java多线程编程总结

Java线程:概念与原理
Java线程:创建与启动
Java线程:线程栈模型与线程的变量
Java线程:线程状态的转换
Java线程:线程的同步与锁
Java线程:线程的交互
Java线程:线程的调度-休眠
Java线程:线程的调度-优先级
Java线程:线程的调度-让步
Java线程:线程的调度-合并
Java线程:线程的调度-守护线程
Java线程:线程的同步-同步方法
Java线程:线程的同步-同步块
Java线程:并发协作-生产者消费者模型
Java线程:并发协作-死锁
Java线程:volatile关键字
Java线程:新特征-线程池
Java线程:新特征-有返回值的线程
Java线程:新特征-锁(上)
Java线程:新特征-锁(下)
Java线程:新特征-信号量
Java线程:新特征-阻塞队列
Java线程:新特征-阻塞栈
Java线程:新特征-条件变量
Java线程:新特征-原子量
Java线程:新特征-障碍器
Java线程:大总结

posted @ 2011-12-21 23:13 paulwong 阅读(275) | 评论 (0)编辑 收藏

仅列出标题
共110页: First 上一页 87 88 89 90 91 92 93 94 95 下一页 Last