
前言
文章的内容,来自博客花园: 像风一样. 有兴趣的朋友可以按照自己的步骤. 可以在历史文章中查看本文的下一部分.
1. 进程和线程
程序是一个进程,程序中的多个任务称为线程.
进程是代表资源分配的基本单位. 线程是在进程中执行计算的最小单位,也是调度操作的基本单位.
例如:
打开计算机上的任务管理器,它将显示当前计算机,QQ,360等的所有进程. 当QQ运行时,将同时运行许多子任务. 例如,当您在打字时发送表情符号,在朋友视频中发送表情符号时,这些不同的功能可以同时运行,每个功能都可以理解为工作中的“线程”.
2. 使用多线程

在Java的JDK开发工具包中,它已经支持多线程技术,该技术可以轻松地用于多线程编程. 有两种方法可以实现多线程编程,一种是继承Thread类,另一种是实现Runnable接口. 使用继承的Thread类创建线程的最大限制是它们不能继承更多,因此为了支持多重继承,可以完全实现Runnable接口. 应该注意的是,这两种方法在工作中的性质是相同的,没有本质上的区别. 看起来像这样:
2.1,继承Thread类
2.2. 实现Runnable接口
Thread.java类中的start()方法通知“线程计划器”该线程已准备就绪,等待调用线程对象的run()方法. 该过程实际上允许系统安排时间来调用Thread中的run()方法多线程编程之一——问题提出,这意味着线程正在运行. 多线程是异步的. 在代码中启动线程的顺序不是调用线程的顺序.
3. 实例变量和线程安全性
自定义线程类中的实例变量可以与其他线程共享或不共享. 当每个线程都有其自己的实例变量时,这意味着不共享变量. 在共享数据的情况下,多个线程可以访问同一变量. 考虑以下示例:

上面的代码定义了一个线程类,以实现count变量减一的效果. Runclass Runjava代码如下:
打印结果如下: 线程C计算计数= 3线程B计算计数= 3线程A计算计数= 2线程D计算计数= 1线程E计算计数= 0线程C,B的打印结果均为3,指示C和B同时处理了计数,从而导致“非线程安全问题”. 但是,我们想要的打印结果不会重复出现,而是顺序减少.
在某些JVM中,i--的操作分为以下三个步骤:
获取原始变量的值. 计算i-1. 给i赋值.
在这三个步骤中,如果同时有多个线程正在访问,那么肯定会有非线程安全问题.
解决方案是使用synced关键字使每个线程队列执行run()方法. 修改后的run()方法:
打印结果: 线程B计算计数= 4线程C计算计数= 3线程A计算计数= 2线程E计算计数= 1线程D计算计数= 0关于System.out.println()方法,首先查看System. out.println()方法源代码:

尽管在println()方法内部使用了synced关键字多线程编程之一——问题提出,但是下面显示的代码在执行时仍可能存在非线程安全性问题.
System.out.println(“ Thread” + Thread.currentThread(). getName()+“ calculate count =” + count--);原因是println()方法在内部是同步的,但是i--操作是在进入println()之前发生的,因此有发生非线程安全问题的可能性.
4. 多线程方法
4.1,currentThread()方法
currentThread()方法可以返回有关代码段正在调用哪个线程的信息.
Thread.currentThread(). getName()
4.2,isAlive()方法
isAlive()方法的功能是确定当前线程是否处于活动状态.

thread.isAlive();
4.3,sleep()方法
sleep()方法的目的是将当前的“正在执行的线程”置于休眠状态(挂起执行),持续指定的毫秒数. 此“执行线程”是指this.currentThread()返回的线程.
Thread.sleep()
4.4,getId()方法
getId()方法的功能是获取线程的唯一标识符.
thread.getId()
结尾
文章的内容,来自博客花园: 像风一样. 有兴趣的朋友可以按照自己的步骤. 可以在历史文章中查看本文的下一部分.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-166380-1.html
苏-30