线程和垃圾回收机制

news/2025/1/1 23:55:12/

二十九.线程

1.线程的创建方法

1.进程:一个正在运行的程序,如qq音乐,浏览器等

2.线程: 线程是进程中的一个执行单元。如qq音乐中的播放和下载,可以同时进行

3.关系:在一个进程中可以包含多个线程 ,当需要在同一时间做多件事情,就需要开启多个线程

关键字: Thread (需要被继承) Runnable(接口,需要被实现)

  1. 开线程必须要用thread类当中的strat()方法

5.如何创建线程

方式一:

1.在java中main函数被称为主线程 多个线程之间的执行是互不影响的

​ 2.在程序中运行出现的错误,如果没有处理会立马结束主程序,但是主程序中开了独立的线程

public class ThreadDemo {public static void main(String[] args) {SubThread thread = new SubThread();thread.start();//线程中的任务不需要手动调用,而是通过start方法在创建并开启线程后自动调用的int a = 1 / 0;}
}class SubThread extends Thread {/*** 创建方式一 run方法用于定义该线程要执行的任务 虚拟机会自动调用run方法*/@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("线程中的任务");}}}

方式二:

public class ThreadDemo {public static void main(String[] args) {//实现Runnable接口是为了定义任务Runnable subrun = new SubRun(); //多态//此处的Thread对象是用于创建并开启线程的,它当中是没有指定任务的Thread thread = new Thread(subrun);thread.start();int a =1/0;}
}class SubRun implements Runnable {@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("线程中的任务");}}
}

问: 两种方式应该选哪一种?

答:选第二种,选择继承的话就意味这该此类不能在继承其他类,扩展性不好(继承只能单继承,接口的实现是可以多实现)

5.同时执行多线程

public class ThreadDemo2 {public static void main(String[] args) {//要执行的任务PrimeRun primeRun = new PrimeRun();//需求:同一个任务需要多个线程去执行,创建一次开一个线程Thread t1 = new Thread(primeRun);t1.start();//t1.start();这样是一个线程开启了多次Thread t2 = new Thread(primeRun);t2.start();//继承得到的是两个不同的任务,没有意义/*PrimeThread primeThread = new PrimeThread();primeThread.start();PrimeThread primeThread2 = new PrimeThread();primeThread2.start();*/}}class PrimeRun implements Runnable{ //接口 实现@Overridepublic void run() {System.out.println("hahah");}}
class PrimeThread extends Thread{ // 继承@Overridepublic void run() {System.out.println("hehe");}}

使用继承方法,只能是单继承,创建对象也是得到两个不同的任务,所以如果要实现多线程,就采用Runnable实现.

2.垃圾回收机制

1.垃圾回收机制是java虚拟机中自动执行的一个线程

2.当程序中存在垃圾对象需要回收的时候,垃圾回收期会自动进行回收,但是回收是不定时的

第一点:并不是有垃圾就立马回收

第二点: 对于垃圾是否需要回收,需要先判断是否为可回收/是否需要回收

3.问题1:如果程序中存在了垃圾,如何通知垃圾回收器进行回收

答:使用System类中的 gc()方法 ,用于通知,对于每个实体类而言,其本身都自带了执行垃圾回收的功能

public class RubbishThread {public static void main(String[] args) {new User();new User();new User();new User();new User();new User();//通知垃圾回收机制回收垃圾System.gc();new User();new User();}
}
public class User {@Overrideprotected void finalize() throws Throwable {System.out.println("执行垃圾回收");super.finalize();}
}

4.问题2: 到底那种对象才能被确定为垃圾对象

答:新生代用于生命周期短的对象,经历过多次回收后仍然存在的,当其内存慢的号死后,回将其复制到老年代中,当老年代中的内存也满的时候,就会直接触发Full gc进行清理

java中的类等静态资源都是存放在持久代中的
在这里插入图片描述

面试题1:final、finally、finalize的区别

final修饰的变量叫常量,只能赋值一次

final修饰的放大叫最终方法,不能被重写

final修饰的类叫最终类,不能被继承

finally是异常汇总的一部分,最终必然会执行的代码块

finalize是垃圾回收机制的执行方法

面试题2:说说垃圾回收机制

答:问题1、问题2

其他知识点:

1.强引用:当内存不足时,垃圾回收器也不会回收强引用的对象

2.软引用:当内存充足时不回收,内存不足时,会回收该对象

3.弱引用:不管内存是否充足,都会回收该对象


http://www.ppmy.cn/news/753393.html

相关文章

计算机桌面图标被挡怎么办,win7电脑桌面图标被挡住怎么恢复 - 卡饭网

Win7电脑桌面图标被覆盖怎么办 Win7电脑桌面图标被覆盖怎么办 我想,对于桌面图标异常故障大家都很常见,有win7系统用户反映说电脑开机之后发现桌面图标被异常覆盖,导致看不出来原图标是什么,而且有时候桌面图标还会打不开,出现这样的问题是怎么回事呢?下面,就跟随U大侠小编一起…

js的垃圾回收机制

js 垃圾回收机制(GC) 1、GC–garbage collection ,js具有“自动”垃圾回收机制 即执行环境会负责管理代码执行过程中使用的内存 2、GC会定期(周期性的)找出那些不再继续使用的变量,然后释放其内存 3、不再使用的变量即…

模拟Android内存不足 activity回收 值保存 状态恢复

作者简介 微信公众号(高质量文章推送):陈博易 作者:陈博易 声明:本文是个人原创,未经允许请勿转载 商业合作请在微信公众号回复:联系方式 **## 前言 1.我记得我实习的那会,面试官…

Android项目中activity被回收,fragment没有被回收

已经好长时间没有写博客,今天在项目中遇到一个问题,在一个界面中,按home件直接返回到桌面,过了一段时间,在进入该界面,出现白板,那么恭喜你,你遇到的问题就是我要说的问题&#xff0…

Activity被回收导致fragment的getActivity为null的解决办法

Activity后台运行一段时间回来crash问题的分析与解决 最近做项目的时候碰到一个棘手的问题,花了不少时间才找到原因并解决。特此记录这个被我踩过的坑,希望其他朋友遇到此问题不要调到这坑里去了。 问题描述: 1、背景:我的app中某…

1.oracle删除表后恢复(回收站)

1.简介 从oracle10g开始,使用drop/truncate命令删除表(没有purge),表不会直接删除,而是被放到回收站,当空间出现短缺时,才会逐渐回收这部分空间,可以从回收站恢复; 2.步…

Android长时间后台运行,内存被回收再次打开导致APP崩溃(APP在后台被系统回收后,如何重新启动?)

问题: 因为手机内存不足的时候,会回收一些APP所占内存,如果被回收的APP中有全局变量,那么再次进入这个APP就会导致异常报错; 原因: 因为Application是全局变量,内存不足的时候会被回收&#…

App进程被回收问题总结

1. App在什么状态下被回收 Android系统在运行程序的过程中发现内存不足,他会去杀一些后台进程,来获取内存,这个过程我们简单称为回收进程。如果后台进程都杀光了,内存还不够,此时可能有2种表现,1&#xff…