概念

并行和并发

  • 并行:物理上的实现,在同一时间点上发生
  • 并发:两个事件在一个时间段内发生,如单片机的单核多线程

进程和线程

  • 进程:一个应用程序可以有多个进程,每一个进程有一个独立的内存空间
  • 线程:一个进程可以并发运行多个线程,多个线程共享一个内存空间
  • 进程调度:获得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多进程入门的更多相关文章

  1. java多线程入门学习(一)

    java多线程入门学习(一) 一.java多线程之前 进程:每一个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销.一个进程包括1--n个线程.     线程:同一类线程共享代码 ...

  2. 自学 Java 怎么入门

    自学 Java 怎么入门? 595赞同反对,不会显示你的姓名     给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...

  3. 《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路

    以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门 ...

  4. Java NIO入门(二):缓冲区内部细节

    Java NIO 入门(二)缓冲区内部细节 概述 本文将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor). 状态变量是前一文中提到的"内部统计机制"的 ...

  5. 完成《Java编程入门》初稿

    Java编程入门 现在的运维工程师不但要懂得集合网络.系统管理而且要和开发人员一起调试系统,社会上也需要"复合性"的运维人员,所以需要做运维的也要懂一些开发,知道软件系统接口的调试 ...

  6. 三、Android NDK编程预备之Java jni入门创建C/C++共享库

    转自: http://www.eoeandroid.com/thread-264971-1-1.html 应网友回复,答应在两天前要出一篇创建C/C++共享库的,但由于清明节假期,跟朋友出去游玩,丢手 ...

  7. 二、Android NDK编程预备之Java jni入门Hello World

    转自:  http://www.eoeandroid.com/forum.php?mod=viewthread&tid=264543&fromuid=588695 昨天已经简要介绍了J ...

  8. C功底挑战Java菜鸟入门概念干货(一)

    一.认识Java 1.Java 程序比较特殊,它必须先经过编译,然后再利用解释的方式来运行.  2.Byte-codes 最大的好处是——可越平台运行,可让“一次编写,处处运行”成为可能.  3.使用 ...

  9. C功底挑战Java菜鸟入门概念干货(二)

    (接上篇博文:C功底挑战Java菜鸟入门概念干货(一)) 一.Java面向对象程序设计-类的基本形式 1.“类”是把事物的数据与相关的功能封装在一起,形成的一种特殊结构,用以表达对真实世界的一种抽象概 ...

随机推荐

  1. python入门22 pymssql模块(python连接sql server查询)

    安装 pip install pymssql 连接数据库 pymssql.connect() # coding:utf-8 import pymssql server = '192.168.8.1' ...

  2. 第1章:初始C#及其开发环境

    第1章:初始C#及其开发环境 Table of Contents 能做什么? 熟悉VS开发环境 Hello World 能做什么? 能生成ASP.NET Web 应用程序.XML Web Servic ...

  3. 【[AHOI2012]树屋阶梯】

    卡特兰数! 至于为什么是卡特兰数,就稍微说那么一两句吧 对于一个高度为\(i\)的阶梯,我们可以在左上角填一个高度为\(k\)的阶梯,右下角填一个高度为\(i-1-k\)的阶梯剩下的我们用一个大的长方 ...

  4. 【转】Android手机分辨率基础知识(DPI,DIP计算)

    1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸 A ...

  5. ZOJ 1610 Count the Colors【题意+线段树区间更新&&单点查询】

    任意门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 Count the Colors Time Limit: 2 ...

  6. 2018.10.8 Hibernate中解决乱码问题---配置一个过滤器

    在web.xml中配置下 <filter> <filter-name>encodeFilter</filter-name> <filter-class> ...

  7. idea + maven + webapp 项目搭建

    1.File-> New -> Project

  8. 【洛谷P1039】侦探推理

    侦探推理 题目链接 这是一道恶心至极的模拟题 我们可以枚举罪犯是谁,今天是星期几,从而判断每个人说的话是真是假 若每个人说的话的真假一致,且说谎话的人数<=k且说真话的人数<=m-k,就是 ...

  9. hadoop 错误

    错误:DataXceiver error processing WRITE_BLOCK operation 2014-05-06 15:21:30,378 ERROR org.apache.hadoo ...

  10. UDP端口启动后一段时间无法接收到数据

    接口需求:开发一个UDP协议的接口作为服务端接收来自客户端的认证数据,数据量每分钟7w+条; 数据格式:标准的redius协议,redius协议的相关知识在网上查资料,提供线索:http://blog ...