Java多线程基础

1、垃圾回收

(1)哪些对象会被gc回收

设置对象为null
Employee e=new Employee();  
e=null;  

无引用对象
Employee e1=new Employee();  
Employee e2=new Employee();  
e1=e2;//now the first object referred by e1 is available for garbage collection 

游离对象

new Employee(); 

(2)gc只能清理new关键字创建的对象

(3)finalize(object方法)在对象被gc之前调用,可以用来清理非new建立的对象,例如非托管资源数据库连接(Connection),也可以清理new关键字创建的对象

2、线程

1、线程状态:创建——启动——运行——休眠——终止
2、线程优先级:MIN_PRIORITY=1,MAX_PRIORITY=10,NORM_PRIORITY=5(默认)
3、守护线程(Daemon thread):优先级低,为User threads提供服务,例如gc、finalize等,当所有user thread结束后,JVM自动终止守护线程


3、JVM

1、终止JVM:System.exit(0);内部实际上调用Runtime.getRuntime().exit(0);
2、shutdown hook:当JVM正常或非正常退出时,会执行shutdown hook,可以作清理资源用(使用示例:Runtime.getRuntime().addShutdownHook(new HookThread());)
3、显式gc:System.gc();内部实际上调用Runtime.getRuntime.gc();


4、代码测试

public class TestGarbage {

	// 在对象被回收之前调用,可以用来清理托管资源(new关键字创建)和非托管资源(例如connection),尤其是非托管资源?
	public void finalize(){
		System.out.println("call the methods complete");
	}
	
	public static void main(String[] args){
		
		TestGarbage test1 = new TestGarbage();
		TestGarbage test2 = new TestGarbage();
		
		test1 = null;  // 标记此对象可以被垃圾回收器回收
		test2 = null;  // 注意gc只回收通过new创建的对象
		
		System.gc();  // 显式触发gc,内部调用Runtime.getRuntime().gc();
		
		try {
			Thread.sleep(10000);  // 但是不确定什么时候调用test1/test2的finalize方法,因此下面sleep一会才可以看到调用过程
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值