【第一章】Java多线程编程

一.进程与线程

多个时间段会有多个程序依次执行,但是同一时间点只有一个进程执行

线程是在进程基础之上划分的更小的程序单元 ,线程是在进程基础上创建并且使用的,所以线程依赖于进程的支持,但是来讲,线程的启动速度要比进程快许多,所以使用多线程进行并发处理的时候,执行的性能要高于进程。

二.Thread类实现多线程

如果想要在JAVA中实现多进程,就必须有一个专门的线程类进行线程执行任务的定义,而这个主体类的定义是有要求的,必须实现特定的接口或者继承特定的父类才可以完成。

1.继承Thread类实现多线程

java里面提供有一个java.lang.Thread的一个程序类,一个类只要继承了此类,并且覆写了Thread类中提供的run()方法,就表示这个类是线程的主体类,而这个方法就是线程的主方法。

范例:多线程主体类:

class Mythread extends Thread{ //线程主体类

privateString title;publicMythread(String title) {this.title =title;

}

@Overridepublic void run() { //线程主体方法

for (int x = 0; x<10;x++) {

System.out.println(this.title + "运行 x =" +x);

}

}

}

多线程要执行的功能都应该在run()方法中定义。需要说明的是,run方法不能够被直接调用,因为这里面牵扯到一个操作系统的资源调度问题

,所以要想启动多线程,必须使用start方法。

new Mythread("线程A").start();new Mythread("线程B").start();new Mythread("线程C").start();

在java程序执行的过程之中考虑到对于不同层次开发者的需求,所以支持有本地的操作系统函数调用,这个技术被称为JNI(Java Native Interface Java本地接口)技术,而java中不推荐这样使用。

而在Thread类里提供的start0()就表示需要将此方法依赖于不同的操作系统实现。

public synchronized voidstart() {if (threadStatus != 0)throw newIllegalThreadStateException();

group.add(this);boolean started = false;try{

start0();

started= true;

}finally{try{if (!started) {

group.threadStartFailed(this);

}

}catch(Throwable ignore) {

}

}

}private native void start0();

疑问:为什么必须使用start而不能使用run方法:

任何情况下只要定义了多线程,多线程的启动永远只有一种方案:Thread类中的start方法。

三.Runnable接口实现多线程

虽然可以通过Thread类的继承来实现多线程的定义,但是在java程序中对于继承永远都是存在有单继承局限的,所以在java又提供了第二种多线程的主体定义形式:

实现java.lang.Runnable,此接口定义如下:

@FunctionalInterfacepublic voidRunnable() {public voidrun();

}

范例:通过Runnable实现多线程(Thread​(Runnable target)):

class Mythread implements Runnable{ //线程主体类

privateString title;publicMythread(String title) {this.title =title;

}

@Overridepublic void run() { //线程主体方法

for (int x = 0; x<10;x++) {

System.out.println(this.title + "运行 x =" +x);

}

}

}public classThreadDemo {public static voidmain(String[] args) {

Thread threada= new Thread(new Mythread("线程对象A"));

Thread threadb= new Thread(new Mythread("线程对象B"));

Thread threadc= new Thread(new Mythread("线程对象C"));

threada.start();

threadb.start();

threadc.start();

}

由于此时只是实现了Runnable接口对象,此时线程主体就不再有单继承的局限,这样的设计才是标准的设计。

Runnable接口使用了函数式接口的定义,所以也可以直接使用Lambda表达式进行线程类实现。

范例:利用Lambda实现多线程定义:

public classThreadDemo {public static voidmain(String[] args) {for(int x = 0 ;x < 3 ; x++) {

String title= "线程对象-" +x;

Runnable run= ()->{for(int y = 0; y < 3 ; y++) {

System.out.println(title+ "运行 x =" +x);

}

};newThread(run).start();

}

}

}

在以后开发之中对于对线程的实现,优先考虑的就是Runnable接口实现,并且都是通过Thread启动多线程

java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程相关推荐

  1. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld

    第一章 Java语言概述.环境变量和HelloWorld 文章目录 第一章 Java语言概述.环境变量和HelloWorld 一.Java语言概述 1.Java简介 2.Java发展历史 3.Java ...

  2. 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)

    java入门-第一章Java语言概述 1基础常识 软件开发 人机交互方式 常用的DOS命令(win系统,有一些直接通过命令执行的) 2 Java语言概述 什么是计算机语言 关于面向对象和面向过程 Ja ...

  3. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  4. 第一章 Java环境搭建、IDEA、Java语言

    JavaSE基础大纲: 一. Java环境搭建.IDEA.Java语言 二.Java语法.运算符.随机数 三.分支.循环.控制关键字 四.数组详解.案例训练 五.方法详解.案例训练 六.面试常见编程案 ...

  5. Java极速入门系列:第一章Java概述、Java环境、IDEA开发工具

    Java极速入门-第一章Java概述.Java环境.IDEA开发工具 一.什么是Java 1.好的编程语言的特性 2.Java的特点 3.Java的运行机制 4.Java的三大体系 5.Java环境 ...

  6. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  7. 《Python核心编程》第二版第18页第一章练习 -Python核心编程答案-自己做的-

    <Python核心编程>第二版第18页第一章练习 这里列出的答案不是来自官方资源,是我自己做的练习,可能有误. 1.9 练习 1-1. 安装Python.请检查Python是否已经安装到你 ...

  8. 基于《java2实用教程》的java知识点复习整理【第一章——java入门】

    第一章--java入门 一.知识结构框架 二.知识点详解 1.java特点:编写一次,随处运行 简单 Java要比C++简单,C++中许多容易混淆的概念,被Java弃之不用了,或者以一种更清楚更容易理 ...

  9. c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt

    c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...

最新文章

  1. 一个有趣的this指向问题
  2. Flask入门flask-script 蓝本 钩子函数(三)
  3. 【Ubuntu】 Ubuntu16.04搭建NFS服务
  4. Mysql 重做日志及与二进制日志的区别
  5. OpenCV3.2+VS2013+Tesseract3.02.02配置
  6. 【渝粤教育】国家开放大学2018年春季 0064-22T20世纪欧美文学 参考试题
  7. php的cms是什么意思,phpcms是什么
  8. php7 编译安装,添加扩展 pdo /usr/local/php/bin/phpize 发现没有 configure
  9. 服务器温度检测软件_科技产品—整机柜服务器—产品简介
  10. 观《五星大饭店》有感
  11. pta第六章错题函数and编程
  12. STM32F303RE 四个ADC同步规则采样
  13. 【Educoder作业】冯·诺依曼体系结构及工作原理理解
  14. 微信小程序邀请判断登陆信息(邀请前做其他操作)
  15. 使用傲梅分区助手无损合并分区,无损调整分区大小
  16. 攻防世界 看雪看雪看雪
  17. 纯html5+css3能写出什么惊人效果
  18. linux ftp 命令lcd,Unix/Linux 中经常使用的 ftp 命令小例
  19. Python的类变量和实例变量
  20. Android系统服务-简介

热门文章

  1. 华为官方强制线刷工具_一加8/8Pro 线刷救砖
  2. python爬取京东评论_Python如何爬取京东的评价信息
  3. db2 控制台执行创建函数语句_DB2数据库中创建定义函数
  4. java final定义_Java中final关键字的用法
  5. Java面试题(亲身经历)
  6. java多线程论文_Java5 多线程之入门篇-论文
  7. SpringBoot项目中Controller层代码编写规范整理
  8. Java JDBC篇2——JDBC增删查改
  9. Java数据库篇7——数据库设计
  10. 脚手架 - props