重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
会放弃CPU资源,锁资源不会放弃的。但是当同步代码执行完毕,资源锁自然就释放了。
创新互联建站专业为企业提供湘乡网站建设、湘乡做网站、湘乡网站设计、湘乡网站制作等企业网站建设、网页设计与制作、湘乡企业网站模板建站服务,十载湘乡做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
比如说:这样一段代码,同时有多个线程在阻塞等待欲执行这个同步方法
synchronized
public
boolean
print(Integer
com)
{
long
iii
=
100000000;
if(com!=flag)
{
Thread.yield();//直接放弃Cpu资源
while
(iii--0);
}
else
{
..............
}
.........return
false;.
}
假如yield会立即释放对象监视器,那么while(iii--)几乎就不执行了,但是实际情况是while(iii--)会从100000000变成0,也就是说不会立即释放锁资源。(但是这个方法,从某种角度,会加速释放锁资源,仅个人见解)
在Java中对资源的读写最后要进行close操作,以下是2种释放资源处理方式:
第1种:把close()放在try中。
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(
"out.txt", true)));
pw.println("This is a test.");
pw.close();
} catch (IOException e) {
e.printStackTrace();
第3种:使用try-with-resource语句。
try (PrintWriter pw = new PrintWriter(
new BufferedWriter(
new FileWriter("out.txt", true)))) {
pw.println("This is a test.");
} catch (IOException e) {
e.printStackTrace();
无论是否有异常发生close()方法都应该被调用,因此close()应放在finally中。而从Java 7开始,可以使用try-with-resource语句。
C--B--A
先关闭结果集,在关闭Statement,最后关闭链接
释放资源的代码一般写在try catch finally 的 finally块中
1楼: JAVA的垃圾回收机智是自动的,但是有些资源是自动回收不了的。不然在J2eeK开发中,对数据库操作时为什么要手动关闭Connection,PreparedStatement,ResultSet这3个对象呢?你说是吧。 然后回楼主: 强制垃圾回收(释放资源): System.gc();