java 怎么启动多线程_了解Java多线程及如何创建和启动多线程?
1 . 进程与线程
至今为止,我们开发的程序在同一时间只能执行一项任务,如果程序执行中遇到了耗时的任务,程序必须等待该任务完成后才能执行后续的代码。这样的单线程结构不能充分利用计算机的硬件资源,代码运行效率不高。合理的使用多线程结构,可以并行的处理多项任务,避免了不相关任务之间的等待,充分利用硬件资源(现往很多CPU 均为多核设计) 提高程序的效率。
进程(process):我们可以简单的认为一个运行中的程序就是一个进程。进程是操作系统分配CPU 资源与内存资源的最小单位。过去的操作系统是单进程的 (如DOS 操作系统),同一时刻只能有一个进行运行;现代的操作系统均是多进程的,允许多个进程同时运行(同时运行QQ和IE 浏览器),操作系统采用时间片轮转法或其他算法为进程分配CPU 资源,下图是Windows 操作系统中某一时刻的进程列表:
对于Java SE 程序,将运行中的Java 程序称为进程则不准确。因为Java 程序并非由操作系统执行分R配CPU资源井执行,而是通过Java 虚拟机执行。对操作系统而言,java虚拟机才是进程 ( 我们在进程列表中会看到java. exe 或javaw.exe ),而Java 程序并不算做进程。
线程(Thread):进程内部可以拥有1 至多个线程,操作系统将资源分配给进程后,进程再将资源分配给线程,由线程完成具体的工作。可以认为进程是线程的容器。我们知道Java SE 程序的执行入口是main 函数,main 函数执行时所属的线程称为一般称为主线程。除了主线程,Java 虚拟机还会启动垃圾回收线程等其他线程。
线程的状态:多个线程之间可以并行执行,也可以根据需要让一个线程等待另一个线程,或暂停一个线程。一般来说,线程的状态有就绪(new)、执行(runnable)、等待(waiting)阻塞(blocked)、终止(terminated) 等。
守护线程(Daemon Thread): 一般来说,进程要等到所有线程都终止运行后才结束。但对于java 中的垃圾回收等线程,是在程序运行过程中一直执行的,不会主动终止,为了保证进程能正常结束,可以将这一类线程标注为守护线程,在java SE 中,Java虚拟机会在所有非守护线程终止后结束进程 (还有一种情况: 调用System. exit ()方法也会导致进程结束)。
2. 创建和启动线程
Java 中有两种创建线程的方法,一种是编写类继承Thread 类,一种是编写类实现Runnable方法,我们使用第一种方式。基本写法如下:
代码演示:创建线程
class Mythread extends Thread {
public void run() { ①
System .out.println(“线程开始执行!”;
try {
Thread.sleep(1000);
}catch (InterruptedException e) {
e.printstacktrace();
}
System.out.prlntln(“线程执行完毕!”;
}
}
public class ThreadDemo {
public static void maln(String[] args) {
System .out.prlntln(”创建线程!') ;
Mythread thread = new Mythread(); ②
System.out.println(''启动线程!”);
thread.start(); ③
System.out.println(“启动完毕! ”);
}
}
输出结果如下:
创建线程!
启动线程!
启动完毕!
线程开始执行! ④
线程执行完毕!
代码解析:
① 线程必须覆盖父类的run 方法。run 方法中的代码会在线程启动的时候执行。run 方法执行结束线程也就执行结束、变为终止状态。
② 实例化线程会使线程处于就绪状态,但这时不会执行线程中的代码。
③ 调用那个线程的start 方法会启动线程,将线程变为执行状态。
④ 从运行结果可以看出,主线程输出”启动线程”后井没有等待子线程, 直接继续执行输出 “启动完毕” ,说明此时主线程与新创建的子线程在同时运行。
分享来自兆隆IT云学院,QQ:598756835
java 怎么启动多线程_了解Java多线程及如何创建和启动多线程?相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java1.5多线程_【Java多线程】JDK1.5并发包API杂谈
并发与并行 并发 一个或多个处理器执行更多的任务(通过划分时间片来执行更多的任务),从逻辑上实现同时运行: 如,N个并发请求在一个两核CPU上: 并行 N个处理器分别同时执行N个任务,从物理上实现同时 ...
- an初始java运行环境错误_【环境问题】STS(eclipse)启动出现错误提示:an error hava occured,see the log......
[环境问题]STS(eclipse)启动出现错误提示:an error hava occured,see the log... 发布时间:2018-06-08 14:08, 浏览次数:562 , 标签 ...
- java匿名启动线程_用java实现匿名内部类启动线程
public class ThreadNoNameTest { public static void main(String[] args) { // 匿名内部类的语法格式:父类/接口类型 引用变量名 ...
- java是什么格式_是java格式
错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...
- JAVA redis缓存过期_失效java服务器
Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...
- java account函数的_用Java进行同时函数调用 - java
在我的应用程序中,我以以下方式加载缓存. 加载用户缓存loadUserCache(); 加载帐户缓存loadAccountCache(); 加载客户缓存loadCustomerCache(); 上述每 ...
- java 线程 获取消息_获取java线程中信息
怎样获取java线程中信息? 在进行多线程编程中,比较重要也是比较困难的一个操作就是如何获取线程中的信息.大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中,然后再提供一个获取方 ...
- JAVA解决实例问题_解决java方法
没有R.java问题找不到getActionBar()方法 android项目,可是项目中没有重要的R.java,并且报错,说是找不到getActionBar()方法,上网寻找原因,终于寻得解决方法: ...
最新文章
- 企业数智化转型与分析流程自动化(APA)
- 中文ocr识别通过crnn
- 焦点轮播图——myfocus焦点图库
- 深入剖析全链路灰度技术
- C#控制管理VisualSVN Server
- Entity Framework 4.3.1 Code First 连接 PostgreSQL 9.2.3 小结
- 基于事件驱动架构构建微服务第11部分:持续集成
- 小程序: 在同一个文件夹中配置多个页面
- docker运行jenkins挂掉_【图文】Jenkins教程集成SonarQube
- 中学生 学python_中小学生为什么要学Python编程
- javascript 西瓜一期 03 机器语言与高级语言
- java值的传递_Java 8可选–基于值的类使用指南
- css3的高级而有用且很少人知道的属性和样式
- 域控制器的常规卸载,Active Directory系列之十三
- 计算机报名照片无法显示,有关人事考试照片审核处理工具的问题
- ueditor清除多余空行
- 服饰柔性3D渲染调研及实践
- wireshark显示过滤器和捕获过滤器
- 通过IO口控制STC15F2K60S2系列单片机输出pwm
- 个人网站可以申请微信授权登录吗
热门文章
- WiFi标志消失的网络问题处理
- spring bean注册和注入覆盖
- 使用ABB PC SDK开发ABB上位机记录
- 给 HTML 元素 Hover 态加点料
- 我的世界服务器指令修复耐久,我的世界修复耐久的指令 | 手游网游页游攻略大全...
- 概率dp总结 正在更新
- 微软正式发布Visual Studio 2013 Update 3 (2013.3) RTM
- SVO学习笔记—基础数据结构分析1
- python-image tools: matplotlib
- 图片添加边框和文字怎么弄?图片编辑在线教学