多线程
2020-12-27 13:28
标签:new star dash 内存 jvm ble 有关 运行 初始化 DAY23 java命令运行一个java程序的过程: a.其实java命令,他启动了一个jvm进程 b.该jvm进程,在执行的时候,首先会创建一个线程,main线程 c.在main线程中,运行主类中的main方法代码 jvm是多线程 在无线循环运行过程中,始终看不到一个内存溢出的错误,为什么呢? 1.其实,因为while循环的每次循环中,都在堆上new出一个数组,并且用一个在while玄幻体重声明的局部变量引起变量指向该数组 2.这意味着,每一个在while循环中创建的数组,再一次循环体执行完毕之后,就变成了垃圾 3.而同时,jvm中,其实还有另一个线程,运行着我们的垃圾回收器 Thread实现方式之一: 1.继承Thread 2.在子类汇总重写父类(Thread)的run方法 3.创建该子类的对象 4.启动线程 start() 注意事项: 1.一个Thread类(Thread子类)对象代表一个线程 2.为什么我们重写Thread类的run方法 结论——>只有Thread run()方法中的代码,才会执行在子线程中 为了保证,子线程中运行的是我们想要在子线程中运行的代码 3.但是,如果想要让代码,在子线程中运行,并非一定代码要写在run方法方法体中,对于定义在Thread子类中,其他方法方法体中的代码,也可以运行在子线程 换句话说,一个方法,被哪个线程中的代码调用,被调用的方法,就运行在调用它的线程里。 4.启动线程,必须使用start()方法来启动,这样才能是Thread中的run方法运行在子线程中,如果通过调用run方法,来执行Thread的run方法,这仅仅只是普通的方法调用 5.同一个Thread或Thread子类对象(代表同一个线程),只能被启动一次,如果我们要启动多个线程,只能创建多个线程对象,并启动这些线程对象 线程实现的第二种方式: 1.定义实现Runable接口的子类 2.实现Runable接口的run方法(写在runable接口子类run方法中的代码,才会运行在子线程中) 3.创建该子类对象 4.在创建Thread对象的时候,将创建好的Runable子类对象作为初始化参数,传递给Thread对象 5.启动Thread对象(启动线程) 注意事项: 1.我们Runable接口子类的run()方法代码,会运行在子线程当中 2.所以在线程的第二种实现方式中,我们自己定义子类,实现Runable接口的run方法,将要在子线程中执行代码。方法run方法中 3.但是,Runable子类对象,并不代表线程,它只代表,要在线程中执行的任务 我们认为,从逻辑上说,第二种方法逻辑十分清晰: 1.线程就是一条执行路径,至于在线程这条执行路径上,究竟执行的是什么样的具体代码,应该和线程本身没有关系 2.也就是说,线程和在线程(执行路径)上执行的任务应该是没有什么直接关系的 3.线程实现的第二种方式,把线程(Thread对象代表线程)和在线程上执行的任务(Runable子类对象)分开 多线程 标签:new star dash 内存 jvm ble 有关 运行 初始化 原文地址:https://www.cnblogs.com/wbh1996/p/13030359.html