学习JAVA的第二十一天(基础)

目录

多线程

线程:

进程:

 并发:

并行:

多线程的实现方式:

Thread类 

 Runnable接口          

Callable接口和Future接口

成员方法

线程的生命周期 

线程的安全问题


 

         前言:学习JAVA的第二十天(基础)-CSDN博客

多线程

线程:

                线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

进程:

                程序的基本执行实体

 并发:

                同一时刻,有多个指令在单个CPU上交替执行

并行:

                 在同一时刻,有多个指令在多个CPU上同时执行
 

多线程的实现方式:

  1. 继承Thread类的方式进行实现
  2. 实现Runnable接口的方式进行实现
  3. 利用Callable接口和Future接口方式实现

Thread类 

 public static void main(String[] args) {
        //1.定义类继承Thread类
        //2.重写run方法
        //3.创建子类的对象,并启动线程

        //创建MyThread对象
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();

        //取名字,方便等会运行看结果
        t1.setName("线程1");
        t2.setName("线程2");

        //开启线程
        t1.start();
        t2.start();

    }

 Runnable接口          

 public static void main(String[] args) {
        //1.定义一个类实现Runnable接口
        //2.重写run方法
        //3.创建自己类的对象
        //4.创建Thread类的对象,并启动线程

        //创建自己类的对象
        MyRun mr = new MyRun();

        //创建Thread类的对象,并启动线程
        Thread t1 = new Thread(mr);
        Thread t2 = new Thread(mr);

        //设置名字
        t1.setName("线程1");
        t2.setName("线程2");

        //开启线程
        t1.start();
        t2.start();

    }

Callable接口和Future接口

  public static void main(String[] args) throws ExecutionException, InterruptedException {
        //1.创建一个类MyCallable实现Callable接口
        //2.重写call(有返回值)
        //3.创建MyCallable的对象(表示要执行的任务)
        //4.创建FutureTask的对象(管理多线程运行的结果)
        //5.创建Thread的对象,并启动线程


        //创建MyCallable对象
        MyCallable mc = new MyCallable();
        //创建FutureTask的对象
        FutureTask<Integer> ft  = new FutureTask<>(mc);
        //创建Thread的对象,并启动线程
        Thread t1 = new Thread(ft);
        t1.start();

        //获取多线程的结果
        System.out.println(ft.get());

    }

成员方法

方法名说明
String  getName()返回线程的名称
void setName(String name)设置线程的名字
static Thread currentThread()获取当前线程的对象
static void sleep(long time )让线程指定的休息时间(单位毫秒)

setPriority(int  newPriority)

设置线程的优先级

final int getPriority()

获取线程的优先级
final void setDaemon(boolean on)设置为守护线程
public static void yield()出让线程
public static void join()插队线程

线程的生命周期 

                        新建状态->就绪状态->运行状态(阻塞状态)->死亡状态        

就绪状态:拥有执行的资格,没有执行权

运行状态:拥有执行的资格,也有执行权

阻塞状态:没有执行的资格,没有执行权

线程的安全问题

                在我们使用多线程的时候,当线程遇到阻塞和就绪等状态时,会争夺CPU的执行权

解决方式:同步代码块(把操作共享数据的代码锁起来

                

//格式
synchronized(锁){
    //操作数据共享的代码
}

特点: 

        锁默认打开,有一个线程进去了,锁自动关闭
        里面的代码全部执行完毕,线程出来,锁自动打开

        锁对象是唯一的 


同步方法 :

                就是把synchronized关键字加到方法上

格式:

修饰符 synchronized 返回值类型 方法名(方法参数){
}

特点:

                同步方法是锁住方法里面所有的代码
                锁对象不能自己指定(非静态:this  静态:当前类的字节码文件对象)


     

 


 

 

                 

 

 

                

 


 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/457237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

经典数组和指针笔试题解析——C语言

【本节内容】 1. 数组和指针笔试题解析 2. 指针运算笔试题解析 1. 数组和指针笔试题解析 1.1 一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%zd\n", sizeof(a));printf("%zd\n", sizeof(a 0));printf("%zd\n&qu…

如何保证Redis和数据库数据一致性

缓存可以提升性能&#xff0c;减轻数据库压力&#xff0c;在获取这部分好处的同时&#xff0c;它却带来了一些新的问题&#xff0c;缓存和数据库之间的数据一致性问题。 想必大家在工作中只要用了咱们缓存势必就会遇到过此类问题 首先我们来看看一致性&#xff1a; 强一致性…

Datawhale【Sora原理与技术实战】| 学习笔记3

目录 一. 训练 Sora 模型二. 数据预处理三. 视频 VQVAE四. Diffusion Transformer 一. 训练 Sora 模型 Open-Sora 在下图中总结了 Sora 可能使用的训练流程&#xff1a; 链路: 二. 数据预处理 目前主流 LLM 框架缺乏针对 video 数据 统一便捷的管理和处理能力&#xff0c;…

第十四届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 特殊日期试题 B: 与或异或试题 C: 棋盘试题 D: 子矩阵试题 E : \mathrm{E}: E: 互质数的个数试题 F: 小蓝的旅行计划试题 G: 奇怪的数试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现宝藏 前些天发现了一个巨牛的人…

InstantID Zero-shot Identity-Preserving Generation in Seconds

InstantID: Zero-shot Identity-Preserving Generation in Seconds TL; DR&#xff1a;InstantID IP-Adapter (Face) ControlNet&#xff0c;实现了具有较高保真度的人脸 ID 生成。 方法 InstantID 想做到的事情是&#xff1a;给定一张参考人脸 ID 图片&#xff0c;生成该…

6. 面向对象(重点)

1 面向对象 1.1 了解对象 学习面向对象编程都先我们需要先思考三个问题: 1.1.1 面向对象的好处? Java作者詹姆斯.高斯林说过**万物皆对象**汽车的数据可以找汽车对象处理手机数据可以找手机对象处理学生的数据可以找学生对象处理使用面向对象编程符合人类思维习惯, 就好比…

Java的编程之旅41——字符流

目录 1.字符流的简介 2.字符的编码与解码 3.字符流读写操作 1.字符流写入 2.字符流复制文件 4.FileWriter&FileReader 5.缓冲区高效读写 6.序列化与反序列化 1.字符流的简介 在Java中&#xff0c;字符流是用于处理字符数据的输入输出流。它是以字符为单位进行处理&a…

户外大屏:六个必备的户外大屏推广工具助你脱颖而出-华媒舍

1. 大屏幕LED显示屏 大屏幕LED显示屏是一种常见而有效的户外推广工具。它采用LED背光源和高分辨率显示屏&#xff0c;能够在户外环境中展示鲜艳丰富的图像和视频内容。这种显示屏广泛应用于广场、商业街、体育场馆等公共场所&#xff0c;成为吸引人们目光的重要工具。 大屏幕…

AIOps探索 | 国外知名厂商根因分析实践分享新方法探索

文章来源于公众号--布博士&#xff08;擎创科技资深产品专家&#xff09; 哈喽&#xff0c;大家好~转眼又到我们分享干货环节了&#xff0c;上一篇AIOps干货后台收到不少反馈&#xff0c;总体来说效果还不错&#xff0c;感谢大家喜欢&#xff0c;后续楼主会定期更新AIOps相关干…

如何使用“ubuntu移动文件、复制文件到其他文件夹“?

一、移动文件到其他文件夹命令 mv node_exporter-1.5.0.linux-amd64.tar.gz /usr/local/etc/prometheus 二、复制文件到其他文件夹命令 cp node_exporter-1.5.0.linux-amd64.tar.gz /home/master

一个八年工作经验老程序员的分享

作为一个 Java 程序员&#xff0c;我在这个行业中工作了多年。在这个过程中&#xff0c;我经历了许多挑战和机遇&#xff0c;也学到了很多宝贵的经验和教训。在这篇文章中&#xff0c;我想分享一些我的感想和思考&#xff0c;希望能够对其他 Java 程序员有所帮助。 一、技术的…

【linux】进程管理:进程控制块、进程号、fork创建进程、特殊进程及exec函数族解析

一、进程的概述 可执行程序运行起来后&#xff08;没有结束之前)&#xff0c;它就成为了一个进程。程序是存放在存储介质上的一个可执行文件&#xff0c;而进程是程序执行的过程。进程的状态是变化的&#xff0c;其包括进程的创建、调度和消亡。程序是静态的&#xff0c;进程是…

基于蓝牙技术的资产管理

随着物联网技术的不断发展&#xff0c;蓝牙技术已经成为了许多领域中不可或缺的一部分。在资产管理领域&#xff0c;基于蓝牙技术的资产定位管理方案正在逐渐普及&#xff0c;为企业提供了更加高效、精准的资产管理方式。本文将从蓝牙技术的原理、资产定位管理的需求、系统架构…

全栈之路-新坑就绪-星野空间

感觉自己的技术栈一直没有形成一个很好的闭环 开新坑&#xff0c;准备把自己的技术栈链路打通&#xff0c; Don‘t think too much&#xff0c; just act&#xff01;[得意]

python retry装饰器使用

第一个例子 import time from functools import wraps from typing import Callable, Any from time import sleepdef retry(retries: int 3, delay: float 1) -> Callable:"""Attempt to call a function, if it fails, try again with a specified dela…

基于单片机的恒压供水控制器设计

摘 要 随着我国现代化的进程不断加快&#xff0c;城市居民生活水平不断提高&#xff0c;随之而来的是房屋的翻新和重建&#xff0c;但建筑层数的不断增高&#xff0c;使得供水所需压力不断提高&#xff0c;若建筑设计时对压力判断不足&#xff0c;会导致供水时无法供应到高楼层…

NO9 蓝桥杯单片机之串口通信的使用

1 基本概念 简单来说&#xff0c;串口通信是一种按位&#xff08;bit&#xff09;传输数据的通信方式。 其他一些知识就直接贴图吧&#xff08;单工&#xff0c;半双工这些学过通信的同学应该都知道&#xff0c;可以上网查询一下具体概念。&#xff09; 来源还是&#xff1a;…

第16届大广赛XPPen都有哪些参赛命题

截至到发文时间&#xff0c;2024年3月14日&#xff0c;第16届大广赛已经累计公布了6个品牌命题&#xff0c;本文就给大家介绍一下XPPen命题的详细细节。 XPPen为汉王友基旗下全球知名数字艺术创新品牌&#xff0c;专注消费级用户创作需求&#xff0c;品牌产品覆盖全球160多个国…

一张图搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!

写在开头 在线程的生命周期中&#xff0c;不同状态之间切换时&#xff0c;可以通过调用sleep()、wait()、join()、yield(&#xff09;等方法进行线程状态控制&#xff0c;针对这一部分知识点&#xff0c;面试官们也会做做文章&#xff0c;比如问你这些方法的作用以及之间的区别…

Linux中mysql的安装、远程访问、基础操作、文件导入

Linux中mysql的安装、远程访问、基础操作、文件导入 cheet card1. 安装1. 使用root账号安装mysql 2. 启动mysql并创建root、管理员两个账号3. 基础操作3.1 数据库的查看、创建、修改、删除3.2 mysql的数据类型3.3 数据表的基本操作3.4 数据表结构的修改3.5 表中数据的增、删、改…