JAVA多进程入门
概念
并行和并发
- 并行:物理上的实现,在同一时间点上发生
- 并发:两个事件在一个时间段内发生,如单片机的单核多线程
进程和线程
- 进程:一个应用程序可以有多个进程,每一个进程有一个独立的内存空间
- 线程:一个进程可以并发运行多个线程,多个线程共享一个内存空间
- 进程调度:获得CPU使用权的线程才能执行,有分时调度和抢占式调度两种
创建进程
1.使用 Runtime 类的 exec() 方法
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("notepad");
2.使用 ProcessBuilder 类的 start() 方法
ProcessBuilder pb = new ProcessBuilder("notepad");
pb.start();
创建线程(请记得start)
1.继承实现
一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。
//1.创建线程子类,继承于 Thread 类
//2.覆盖 Thread 类中的 run 方法{改方法中的代码称为线程执行体}
public void run() {
System.out.println("1");
}
public static void main(String[] args) {
//3.在主线程中创建 线程子类对象并启动
new ThreadDemo().start();
System.out.println("好");
}
2.接口实现
class Thread2 implements Runnable {
// 1.创建线程子类,继承于 Thread 类
// 2.覆盖 Thread 类中的 run 方法{改方法中的代码称为线程执行体}
public void run() {
System.out.println("使用接口方法");
}
}
//3.在主线程中创建线程子类对象,把对象作为参数传给Thread类,启动线程
public static void main(String[] args) {
Thread2 p = new Thread2();
new Thread(p).start();
}
匿名内部类
//(实现接口方式)
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}).start();
//(覆盖方式)
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
}
}.start();
两种方法比较和获取名称
继承
继承方式,创建不是数据的实例,num 必须称为全局变量,否则会重复创建堆空间的数据,父类中拥有getname()方法,使用构造器传入名字参数,即可在子类中获取名称
package java_study;
class People extends Thread {
public static int num = 50;
public People(String name) {
super(name);
}
public void run() {
for (int i = 0; i < num; i++) {
System.out.println(super.getName() + "吃了" + num-- + "个苹果");
}
}
}
public class ThreadExtendsApple {
public static void main(String[] args) {
new People("小A").start();
new People("小B").start();
new People("小C").start();
}
}
接口(更常用)
使用Apple封装数据,更加合理科学。使用 Thread 类的静态方法 currentThread() 得到当前类的对象,从而获取对象的名字
package java_study;
class Apple implements Runnable {
public int num = 50;
@Override
public void run() {
for (int i = 0; i < 50; i++) {
String name = Thread.currentThread().getName();
if (num > 0) {
System.out.println(name + "吃了第" + num-- + "个苹果");
}
}
}
}
public class ThreadImplementApple {
public static void main(String[] args) {
Apple a = new Apple();
new Thread(a, "A").start();
new Thread(a, "B").start();
new Thread(a, "C").start();
}
}
JAVA多进程入门的更多相关文章
- java多线程入门学习(一)
java多线程入门学习(一) 一.java多线程之前 进程:每一个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销.一个进程包括1--n个线程. 线程:同一类线程共享代码 ...
- 自学 Java 怎么入门
自学 Java 怎么入门? 595赞同反对,不会显示你的姓名 给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...
- 《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路
以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门 ...
- Java NIO入门(二):缓冲区内部细节
Java NIO 入门(二)缓冲区内部细节 概述 本文将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor). 状态变量是前一文中提到的"内部统计机制"的 ...
- 完成《Java编程入门》初稿
Java编程入门 现在的运维工程师不但要懂得集合网络.系统管理而且要和开发人员一起调试系统,社会上也需要"复合性"的运维人员,所以需要做运维的也要懂一些开发,知道软件系统接口的调试 ...
- 三、Android NDK编程预备之Java jni入门创建C/C++共享库
转自: http://www.eoeandroid.com/thread-264971-1-1.html 应网友回复,答应在两天前要出一篇创建C/C++共享库的,但由于清明节假期,跟朋友出去游玩,丢手 ...
- 二、Android NDK编程预备之Java jni入门Hello World
转自: http://www.eoeandroid.com/forum.php?mod=viewthread&tid=264543&fromuid=588695 昨天已经简要介绍了J ...
- C功底挑战Java菜鸟入门概念干货(一)
一.认识Java 1.Java 程序比较特殊,它必须先经过编译,然后再利用解释的方式来运行. 2.Byte-codes 最大的好处是——可越平台运行,可让“一次编写,处处运行”成为可能. 3.使用 ...
- C功底挑战Java菜鸟入门概念干货(二)
(接上篇博文:C功底挑战Java菜鸟入门概念干货(一)) 一.Java面向对象程序设计-类的基本形式 1.“类”是把事物的数据与相关的功能封装在一起,形成的一种特殊结构,用以表达对真实世界的一种抽象概 ...
随机推荐
- June 02nd 2017 Week 22nd Friday
A burden of one's choice is not felt. 爱挑的担子不嫌重. When doing things I love to do, I seldom feel tired ...
- STM32-F429ZIT6-关于驱动安装
第一步:下载驱动 1.个人百度云链接:http://pan.baidu.com/s/1dE8vxy5 密码:yow0 2.网站下载:这个还是直接百度吧. 第二步:驱动安装 注意:安装之前要先关闭安全监 ...
- git作业
第一部分 我的地址:https://github.com/Tohsaka-Rin-ZYJ/123/tree/master 第二部分 我对git的认识: Git是一个开源的分布式版本控制系统,用以有效. ...
- IOS Xib使用
- public class Promise<T>: Thenable, CatchMixin
public class Promise<T>: Thenable, CatchMixin
- P1171 售货员的难题 暴力dp
题面 著名的TSP问题,NPC问题 对于数据大的情况,我们可以使用一系列近似算法进行寻找解. 对于数据规模小的情况,我们可以直接暴力dp 一开始写了一个dfs,然后就被n=20的数据卡爆了 #incl ...
- 【题解】洛谷P3205【HNOI2010】合唱队
洛谷 P3205:https://www.luogu.org/problemnew/show/P3205 复习区间DPing 思路 把理想队列拆分成 第一个和后面几个 划分成求后面几个的理想队列 最后 ...
- An Algorithm for Surface Encoding and Reconstruction From 3D Point Cloud Data
An Algorithm for Surface Encoding and Reconstruction From 3D Point Cloud Data https://www.youtube.co ...
- 关于利用HashSet,split,deleteCharAt等方法详解
1.首先了解一下HashSet的原理: Set接口 Set是对数学上集的抽象,Set中不包含重复的元素.如何界定是否是重复元素?Set最多可含一个null元素;对于任意的非null元素e1和e2,都 ...
- spring入门(三) 使用spring mvc
1.建立project / module 新建空的project:springMvcStudy 新建module:type maven-webapp,名字mvcStudy 2.为module设置Sou ...