文档章节

java虚拟机中的两种线程 以及实现方法

hero丶
 hero丶
发布于 2017/04/09 13:43
字数 753
阅读 3
收藏 0

在Java虚拟机内部有两种线程:

守护线程 虚拟机自己使用。 执行垃圾收集任务的线程。 只要有任何非守护线程存在,那么程序也在继续运行。 非守护线程 java程序的初始线程:有main的。 普通的java程序:如果main中没有调用其他线程,执行完程序之后就终止了该程序中唯一的非守护线程,导致虚拟机实例退出。 那么介绍一下java线程的两种方法 先看一下java线程运行时各个阶段的运行状态

java实现多线程有两种方法 1、继承Thread类 2、实现Runnable接口 这两种方法的共同点: 不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。 两种方法的不同点: 1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承 2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性

基于以上两点所以建议用第二种方法

下面用例子来做说明 程序1:

package com.dr.runnable1; //一个类只要继承了Thread类,则此类就是多线程类 class MyThread extends Thread { private String name; public MyThread(String name) { this.name=name; } //如果要使用多线程,则必须有一个方法的主体 public void run() { //打印输出 for(int i=0;i<10;i++) { System.out.println(this.name+"----->运行、、、、"); } } } public class Demo1 { public static void main(String args[]) {

//第一种方法 Runnable r1=new MyThread("线程A"); Runnable r2=new MyThread("线程B"); Runnable r3=new MyThread("线程C"); Thread t1=new Thread(r1); Thread t2=new Thread(r2); Thread t3=new Thread(r3); t1.start(); t2.start(); t3.start();

// mt1.run();//线程执行,使用start方法 // mt2.run(); // mt3.run();

//第二种方法

// MyThread mt1=new MyThread("线程A"); // MyThread mt2=new MyThread("线程B"); // MyThread mt3=new MyThread("线程C"); // mt1.start(); // mt1.start();//线程只能启动一次 // mt2.start(); // mt3.start();

} 

}

程序的运行结果是: 1 这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程 第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程 程序2:

package com.dr.runnable1; class MyThread1 implements Runnable { private int ticket=10; public void run() { for(int i=0;i<500;i++) { if(this.ticket>0) { System.out.println("卖票----->"+(this.ticket--)); } } } } public class Demo2 { public static void main(String args[]) { MyThread1 mt=new MyThread1(); Thread t1=new Thread(mt); Thread t2=new Thread(mt); Thread t3=new Thread(mt); t1.start(); t2.start(); t3.start(); }

}

程序运行结果: 2 这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。

© 著作权归作者所有

共有 人打赏支持
hero丶
粉丝 0
博文 9
码字总数 898
作品 0
哈尔滨
程序员
私信 提问
JVM 虚拟机(对象创建,类加载器,执行引擎等),

1.揭开 Java 对象创建的奥秘? 2.class 文件结构详解? 3.详解 Java 类的加载过程? > Java 对象创建,class 文件结构 Java对象模型 。Java对象保存在堆内存中。在内存中,一个Java对象包含三...

desaco
2018/08/29
0
0
Java虚拟机必学之四大知识要点你掌握了吗?

作为一位 Java 程序员,在尽情享受 Java 虚拟机带来好处的同时,我们还应该去了解和思考“这些技术特性是如何实现的”,去了解最底层的原理。只有熟悉 JVM,你才能在遇到 OutOfMemory 等异常...

Java干货分享
2018/10/17
0
0
01-《深度拆解JVM》之Java代码是怎么运行的?

一、Java代码的运行方式 可以在开发工具中运行 可以双击执行 jar 文件运行 可以在命令行中运行 可以在网页中运行 当然,这些执行方式都离不开 JRE,也就是 Java 运行时环境。实际上,JRE 仅包...

飞鱼说编程
2018/09/07
0
0
java.lang.management

java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。它同时允许从本地和远程对正在运行的 Java 虚拟机进行监视和管理。 主要接口: Clas...

snail-
2015/08/17
0
0
详细介绍什么是Java虚拟机

一、什么是Java虚拟机 当你谈到Java虚拟机时,你可能是指: 1、抽象的Java虚拟机规范 2、一个具体的Java虚拟机实现 3、一个运行的Java虚拟机实例 二、Java虚拟机的生命周期 一个运行中的Jav...

精华之王
2009/04/11
248
0

没有更多内容

加载失败,请刷新页面

加载更多

苏宁金融红包系统大促海量流量背后的技术支撑

发红包是目前各大互联网公司最常用的营销手段之一,它形式多样,内容丰富。2016 年底苏宁金融开启了红包系统及相关系统的项目开发。 本文将对苏宁金融红包系统的架构部署方式、演变过程、技术...

架构师springboot
9分钟前
2
0
Linux恢复误删除的文件或者目录

2017 年 2 月 1 日 GitLab 数据库被误删引起了广大争议. linux不像windows有个回收站,使用rm -rf *基本上文件是找不回来的。 那么问题来了: 对于linux下误删的文件,我们是否真的无法通过软...

Goopand
9分钟前
0
0
从NeurIPS 2018看AI发展路线!

摘要: 从NeurIPS 2018看AI发展路线! 去年9月份的时候,我发表过一份技术报告,阐述了我认为人工智能最重要的挑战,大概有以下四个方面: ·可伸缩性(Scalability)计算或存储的成本不与神...

阿里云官方博客
10分钟前
0
0
快速入门:selenium自动化测试+ubuntu系统+php语言+firefox/chrome浏览器

前言 selenium可用于界面UI自动化测试,因此也可用于来做一些自动化方面的事情。下面简单总结概括一下,对于一位新手,学习和使用selenium的基本过程。 本文只要针对:selenium自动化测试+ub...

暗夜在火星
12分钟前
0
0
List集合知识总结

转载: 一:集合的概念 集合:保存数量不确定的数据,以及保存具有映射关系的数据的容器,简单的理解就是用于存储数量不等的多个对象的容器。 集合和数组不一样,数组元素既可以是基本类型的值...

小橙子的曼曼
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部