IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Java中的多线程 -> 正文阅读

[PHP知识库]Java中的多线程

一.进程和线程

1.1 进程

是指一个内存中运行的应用程序(例如:QQ音乐 、微信),每个进程都有一个独立的内存空间

1.2 线程

是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少有一个线程线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程

1.3线程的两种调度模式

  • 分时调度

所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

  • 抢占式调度

优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度,CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核新而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。

1.4 同步与异步

同步:  排队执行 , 效率低但是安全.
异步:   同时执行 , 效率高但是数据不安全.

1.5 并发与并行

并发:指两个或多个事件在同一个时间段内发生。
并行:指两个或多个事件在同一时刻发生(同时发生)

二.系统引入多进程的作用

最初的计算机是“单进程的”,计算机只能运行一个应用程序,例如第一台计算机只有DOS窗口。现代的计算机可以满足我们一边听音乐,一边玩游戏。现代的计算给我们人类感觉:多件事情一起运行。感觉是并行的(错觉)。对于单核的计算机来讲,在某一个时间点上只能做一件事情,但是由于计算机的处理速度很高,多个进程之间完成频繁的切换执行,这个切换速度使人类产生了错觉,人类的错觉是:多个进程在同时运行。
计算机引入多进程的作用:提高CPU的使用率。
重点:进程和进程之间的内存独立。

三.创建线程的三种方法与启动

3.1.1 继承Thread类

Thread类中创建线程最重要的两个方法为:
public void run()
public void start()
采用Thread类创建线程,只需要继承Thread,覆盖Thread中的run方法,Thread中的run方法没有抛出异常,那么子类也不能抛出异常,最后采用start方法启动线程即可

public class ThreadTest01 {
	public static void main(String[] args) {
	Processor p = new Processor();
	p.run();
	method1();
	}
	private static void
	method1() {
	System.out.println("--------method1()----------");
	}
	}
	class Processor {
	public void run() {
	for (int i=0; i<10; i++) {
	System.out.println(i);
	}
	}
}

3.1.2实现Runnable接口

其实Thread对象本身就实现了Runnable接口,但一般建议直接使Runnable接口来写多线程程序,因为接口会比类带来更多的好处,之后用到Runnable比较多。
【示例代码】

public class ThreadTest03 {
	public static void main(String[] args) {
	//Processor r1 = new Processor();
	Runnable r1 = new Processor();
	//
	不能直接调用
	run
	//p.run();
	Thread t1 = new Thread(r1);
	//
	启动线程
	t1.start();
	method1();
	}
	private static void
	method1() {
	System.out.println("--------method1()----------");
	}
	}
	//
	实现
	Runnable
	接口
	class Processor implements Runnable {
	//
	实现
	Runnable
	中的
	run
	方法
	public void run() {
	for (int i=0; i<10; i++) {
	System.out.println(i);
	}
	}
}

3.1.3实现Callable接口,重写call方法。

Callable接口方法有返回值,可以得到在main线程中得到返回值

import java.util.concurrent.*;
	 public class CallableAndFuture {  // 创建线程类 
	 public static class CallableTest implements Callable<String>  {  
	 public String call() throws Exception    {    return "Hello World!"; 
	  } 
	 }  
	public static void main(String[] args)   {  
	 ExecutorService threadPool = Executors.newSingleThreadExecutor();   // 启动线程   
	Future<String> future = threadPool.submit(new CallableTest());
	   try   {   
	 System.out.println("waiting thread to finish");   
	 System.out.println(future.get()); // 等待线程结束,并获取返回结果  
	}   catch (Exception e)    {  
	  e.printStackTrace(); 
	  }  
	} 
} 

四.线程的生命周期

线程的生命周期存在五个状态:

新建:采用new语句创建完成
就绪:执行start后
运行:占用CPU时间
阻塞:执行了wait语句、执行了sleep语句和等待某个对象锁,等待输入的合
终止:退出run()方法
线程的生命周期

五.线程优先级

优 先 级 主 要 分 三 种
MAX_PRIORITY(最高级)
MIN_PRIORITY(最低级)
NOM_PRIORITY(标准)默认
优先级高的线程会得到的CPU时间多一些,优先执行完成

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:26:09  更:2021-09-22 14:27:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:48:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码