1.什么是进程?什么是线程?两者之间什么关系?
进程:就是一个正在运行的程序,比如:typeroa、eclipse、浏览器等等
线程:线程是进程中的一个执行单元,例如:QQ音乐播放音乐和下载音乐
关系:在一个进程中可以包含多个线程
2.当需要在同一个时刻去做多件事情时,就需要开启多个线程
3.关键词:
Thread(线程类,用于管理线程的创建、开启及相关的信息)
Runnable(定义任务的接口)
4.创建线程的方式?
1.继承Thread类,通过start方法创建并开启线程(常用)
2.实现Runnable接口,结合Thread类创建并开启线程(常用)
3.实现Callable接口,通过Executor执行
4.通过线程池
代码很重要,重要注释
public class **** {
public static void main(String[] args) {
SubRun thread = new SubRun();
Thread t1 = new Thread(thread);
t1.start();
Thread t2 = new Thread(thread);
t2.start();
SubThread subthread1 = new SubThread();
subthread1.start();
}
}
class SubThread extends Thread{
@Override
public void run() {
System.out.println("哈哈哈哈哈");
}
}
class SubRun implements Runnable{
@Override
public void run() {
System.out.println("呵呵呵呵呵");
}
}
5. 垃圾回收机制
import ****.User;
public class ***** {
public static void main(String[] args) {
new User();
new User();
new User();
new User();
new User();
new User();
new User();
System.gc();
}
}
public class User {
@Override
protected void finalize() throws Throwable {
System.out.println("执行垃圾回收");
super.finalize();
}
}
垃圾回收机制是java虚拟机中自动执行的一个线程
虚拟机的内存是有限的,因此,对于在程序运行过程中创建的对象(占用的资源),
虚拟机需要对其进行监控,当发现有对象不再有引用的时候就将其进行回收,该回收的动作是
贯穿整个程序的,但是,回收是不定时的,它是一个单独的线程,称该线程为垃圾回收机制。
对于垃圾是否要进行回收,需要先判断其是否为可回收(需要回收)的垃圾
6.如果程序中存在了垃圾,如何通知垃圾回收器进行回收
在System类中有一个方法叫gc(),用于通知的,对于每个实体类而言,其本身都自带了执行垃圾回收的功能
7.final、finally和finalize的区别
final修饰的变量叫常量,只能赋值一次
final修饰的方法叫最终方法,不能被重写
final修饰的类叫最终类,不能被继承
finally是异常中的一部分,最终必然会执行的代码块
finalize是垃圾回收机制的执行方法
8.说说垃圾回收机制
在垃圾回收机制中定义了很多回收算法,比较典型的是年代算法,
其中分新生代、老年代及持久代 新生代用于生命周期短的对象,经历过多次回收之后仍然存在的,
当其内存满的时候,会将其复制到老年代中,当老年代中的内存也满的时候就直接出发Full gc进行清理
java中的类等静态资源都存放在持久代中的