概念

并行和并发

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

进程和线程

  • 进程:一个应用程序可以有多个进程,每一个进程有一个独立的内存空间
  • 线程:一个进程可以并发运行多个线程,多个线程共享一个内存空间
  • 进程调度:获得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. Qt 窗口移动实现

    很多人觉得系统自带的标题栏太丑了,想要自绘一个标题栏,去掉了系统自带的标题栏后,就需要自己实现窗口移动,下面的代码就是实现窗口移动. widget.h #ifndef WIDGET_H #define ...

  2. 在Oracle中查看客户端连接的IP信息 .

    大家都知道在v$session 中记录着客户端的机器名称,但是没有IP , 如果记录clinet ip 呢? con sys/sys as dba 1. 利用triger 这里不介绍. 2. 利用 D ...

  3. 《3D打印:从想象到现实》:基本没发现独到之处

    本书汇总了3D打印的相关咨询:原理.可能的或已经实现的应用.商业模式等等.由于3D打印是最近媒体上比较热的信息,对我来说书中的大部分内容都没有独到之处,都是已知的.

  4. 走进git

    一.什么是git和githob? Git是一款免费.开源的分布式版本控制系统.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件.Githu ...

  5. 319. Bulb Switcher (Math, Pattern)

    There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...

  6. OC property(声明)

    @interface Student : NSObject { int _age; int _no; float _height; } // 当编译器遇到@property时,会自动展开成getter ...

  7. bzoj5000 OI树

    Description 几天之后小跳蚤即将结束自己在lydsy星球上的旅行.这时,lydsy人却发现他们的超空间传送装置的能量早在小跳蚤通过石板来到lydsy星球时就已经消耗光了.这时,小跳蚤了解到自 ...

  8. Mysql跨数据库(在同一IP地址中)复制表

    数据库表间数据复制分类 在利用数据库开发时,常常会将一些表之间的数据互相导入.当然可以编写程序实现,但是,程序常常需要开发环境,不方便.最方便是利用sql语言直接导入.既方便而修改也简单.以下就是导入 ...

  9. Dapper.net ORM

    参考链接:https://github.com/StackExchange/dapper-dot-net Dapper - a simple object mapper for .Net Dapper ...

  10. EF6.0 对于数据库优 模式 新加功能

    EF6.0相对于5.0新加了很多功能.先看看两个模式的一些特点. 数据库优先(设计者)和代码优先两者的特点: 连接弹性 异步查询和保存 基于代码的配置 数据库命令记录 数据库命令截取 依赖决议 DbS ...