Java基础笔记33-线程、垃圾回收机制

Java基础笔记33-线程、垃圾回收机制

1.线程

简介

  • 进程:就是运行的一个程序,比如Eclipse,浏览器等

  • 线程:线程是进程中的一个执行单元,比如音乐播放器中的播放和下载音乐就分属两个线程

  • 关系:一个进程中可以包含多个线程,当需要一个程序同时运行多个功能时,可以开启多个线程。

  • 关键词

    • Thread 是一个类,继承此类之后,可以创建一个线程,通过 start() 方法可以开启线程
    • Runnable 是一个接口,可以结合Thread类创建并开启线程。
  • 创建线程的方式

1.继承Thread类,通过start方法创建并开启线程(常用)

2.实现Runnable接口,结合Thread类创建并开启线程(常用)

3.实现Callable接口,通过Executor执行

4.通过线程池

代码示例:

public class ThreadDemo {
	public static void main(String[] args) {
		//创建一个新线程
		SubThread th1 = new SubThread();
		//线程开始,线程中的run()方法会自动运行
		th1.start();
		//使用继承开两个线程是每个线程都需要一个对象来运行
		SubThread th2 = new SubThread();
		th2.start();
		
		//使用子类创建一个实现Runnable实例,
		Runnable runn = new SubRunnable();
		//使用Thread将上述实例转换为线程
		Thread ru1 = new Thread(runn);
		//线程开始运行
		ru1.start();		
		//使用实现方式开两个线程是一个对象在两个线程中使用
		Thread ru2 = new Thread(runn);
		ru2.start();
	}

}
/**
 * 继承Thread类,创建线程方法
 *
 */
class SubThread extends Thread{
	/**
	 * 线程中的run()方法用于定义该线程中要执行的任务
	 * 线程中run()方法不需要手动调用,在使用start()方法开启线程时,会自动调用
	 */
	@Override
	public void run() {
		//死循环,用于演示线程输出
		for(;true;) {
			out();
			System.out.println("继承Thread后重写的run方法");
		}
	}
	//私有方法,演示方法调用
	private void  out() {
		System.out.println("SubThread中的私有方法");
	}
}

/**
 * 实现Runnable来创建线程
 *
 */
class SubRunnable implements Runnable {
	@Override
	public void run() {
		//死循环演示输出
		while(true) {
			System.out.println("SubRunnable中的run方法");
		}
	}
}
  • 线程中的 run() 方法用于定义该线程中要执行的任务
  • 线程中 run() 方法不需要手动调用,在使用 start() 方法开启线程时,会自动调用
  • 多个线程之间的运行是互不影响的
2.垃圾回收机制
  • 简介
    • 虚拟机的内存是有限的,因此,对于在程序运行过程中创建的对象(占用的资源),虚拟机需要对其进行监控,当发现有对象不再有引用的时候就将其进行回收,该回收的动作是贯穿整个程序的,它是一个单独的线程,称该线程为垃圾回收机制。
  • 垃圾回收机制是java虚拟机中自动执行的一个线程
  • 当程序中存在垃圾对象需要回收的时候,垃圾回收器会自定进行回收,但是,回收是不定时的
    • 第一点是:并不是有垃圾了就立马回收
    • 第二点是:对于垃圾是否要进行回收,需要先判断其是否为可回收(需要回收)的垃圾
  • 在System类中有一个方法叫gc(),用于通知的,对于每个实体类而言,其本身都自带了执行垃圾回收的功能
  • 垃圾回收算法
    • 在垃圾回收机制中定义了很多回收算法,比较典型的是年代算法,其中分新生代、老年代及持久代
    • 新生代用于生命周期短的对象,经历过多次回收之后仍然存在的,当其内存满的时候,会将其复制到老年代中,当老年代中的内存也满的时候就直接出发Full gc进行清理
    • java中的类等静态资源都存放在持久代中的

代码示例

class User {
	//重写垃圾回收时执行的方法,可用于演示是否执行了垃圾回收操作
	@Override
	protected void finalize() throws Throwable {
		System.out.println("执行垃圾回收");
		super.finalize();
	}
}
public class GarbageCollectionDemo {
	public static void main(String[] args) {
		new User();
		new User();
		new User();
		new User();
		new User();
        //gc()方法用于通知垃圾回收机制进行垃圾回收,但时机由垃圾回收器决定
		System.gc();
	}
}
  • 垃圾回收中的四种引用方式简介
    • 强引用:当内存不足时,垃圾回收器也不会回收强引用的对象
    • 软引用:当内存充足时不回收,内存不足时,会回收该对象
    • 弱引用:不管内存是否充足,都会回收该对象
    • 虚引用:用于跟踪垃圾回收器的回收活动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值