首页 > 编程语言 >Java多线程

Java多线程

时间:2024-09-05 17:51:13浏览次数:9  
标签:同步 Java Thread 代码 线程 run 多线程

进程 and 线程

        进程是程序的一次动态执行过程。经历了从代码加载、执行到执行完毕的一个完整过程;(由于CPU的执行速度很快,使得所有的进程像是“同时”执行一样)

多线程是实现并发机制的一种有效手段。线程是比进程更小的执行单位,多线程是指一个进程在执行过程中可以产生多个更小的程序单元(即线程),这些线程可以同时存在、同时运行,而一个进程包含了多个同时执行的线程.

         

Java中线程的实现

   所谓的线程(Thread)是指程序的运行流程,多线程的机制则是指可以同时运行多个程序块,使程序的运行效率更高.

   Java中,实现多线程代码有两种方式:一是继承Thread类;二是实现Runnable接口(JDK1.5之后提供有一个新的Callable接口)

继承Thread类:

  一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类中,必须明确的覆写Thread类中的run()方法。此方法为线程的主体.

演示:

class MyThread extends Thread{
    private String name;
    public MyThread(String name){
        this.name=name;
    }
    public void run(){
        for(int i=0;i<=10;i++)
            System.out.println(name+"运行"+"\t"+"i="+i);
    }
}

public class ThreadDemo {
    public static void main(String[] args) {
        MyThread m1=new MyThread("线程A");
        MyThread m2=new MyThread("线程B");
        m1.run();
        m2.run();
    }
}

此时会发现控制台打印的结果并没有交替打印,要想启动线程,是不能直接调用run()方法的.

  而是应该调用从Thread类中继承而来的start()方法. 改:

m1.run() --- m1.start()

m2.run()---m2.start()

此时就会交替打印,但每次结果可能不同——哪个线程对象抢到了CPU资源,哪个线程就先运行

实现Runnable接口:

Thread类和Runnable接口的区别

线程的状态

   要想实现多线程,必须在主线程中创建新的线程对象。线程一般有5中状态:创建、就绪、运行、阻塞、终止. 

           

1. 创建状态:

      在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态。此时,它已经有了相应的内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可采用Thread类的构造方法实现,例如:Thread thread = new Thread();

同步与死锁

  所谓的同步,是指多个操作在同一时间段内只能有一个线程进行,其他线程要等此线程完成之后才可以进行。

使用同步解决问题:

 解决资源共享的同步操作,可以使用同步代码块和同步方法两种方式完成.

1、同步代码块: 代码块是指使用{}括起来的一段代码,根据其位置和声明的不同,可以分为普通代码块、构造块、静态块3种,如果在代码加上synchronized关键字,则此代码称同步代码块

    

死锁: 

一般程序的死锁是在程序运行时出现的.

读者需要记住:多个线程共享同一资源时,需要同步;但是,过多的同步可能造成死锁

标签:同步,Java,Thread,代码,线程,run,多线程
From: https://blog.csdn.net/2301_80072698/article/details/141931239

相关文章

  • Java项目: 基于SpringBoot+mysql蜗牛兼职网兼职平台管理系统(含源码+数据库+答辩PPT+
    一、项目简介本项目是一套基于SpringBoot+mysql蜗牛兼职网兼职平台管理系统包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse或者idea确保可以运行!该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用......
  • java.lang.ClassNotFoundException: net.logstash.logback.appender.LogstashTcpSocke
    出现以下错误,是因为项目缺少依赖:atorg.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:189)atorg.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(Log......
  • java知识点——String类常用方法
    字符串常用方法: 方法描述int字符串.length()获取字符串长度boolean字符串.equals比较字符串内容是否相等boolean字符串1.equalsIgnoreCase(字符串2)不分大小写比较内容String字符串.toLowerCase()将字符串全部转成小写的String字符串.toUpperCas......
  • 如何在Java中实现对象和Map之间的转换
    在Java中,将对象与Map之间转换的需求很常见,特别是在处理JSON序列化和反序列化时。你可以使用不同的方法来实现这一转换,以下是几种常见的方法:1.使用Jackson库Jackson是一个流行的JSON处理库,它可以很方便地将Java对象转换为Map,以及将Map转换为Java对象。依赖(如果使用Maven):<dependency......
  • Java并发编程实战 01 | 进程和线程
    最早的计算机就像一个新手服务员,只有在接收到每一条指令时才会开始执行。当用户输入指令时,计算机会执行这条指令,然后等待下一条指令。如果用户在思考或者犹豫时,计算机就会乖乖地等待,虽然这很规范,但效率实在是有点低,因为计算机有很多时间是闲着的。批处理操作系统后来,批......
  • Java并发编程实战 02 | 为什么创建线程只有一种方法?
    在Java中,我们如何创建和使用线程?为什么说线程的创建方式本质上只有一种呢?本文将从并发编程的基础——如何创建线程开始,希望大家能够打好基础。虽然线程的创建看起来很简单,但其中还是有很多细节值得深入探讨。最后,我们将揭开线程实现的面纱,看清它的本质。首先,大家可以思考......
  • Java环境配置包含Maven,idea配置,保姆级教程!
    1.本期工具Maven:https://maven.apache.org/Java:https://www.oracle.com/cn/java/technologies/downloads/#java22Idea:https://www.jetbrains.com/zh-cn/idea/download/?section=windows2.Java安装配置1.jdk下载官网下载:https://www.oracle.com/cn/java/techn......
  • 基于JAVA的个人理财系统设计与实现的计算机毕设
    基于JAVA的个人理财系统设计与实现摘要随着现在社会的快速发展和进步,人们的生活水平也不断提高,人们不仅在生活物质上提高,而且在整体素质上也不断提高,在某个职业道德也投入了很多的资金和时间。对于一些年轻的人来说,在资金和物质上有时候不知道该如何去操作,也更不知道去如何将这......
  • Java中的图像复原:如何实现高效的去雾与去雨算法
    Java中的图像复原:如何实现高效的去雾与去雨算法大家好,我是阿可,微赚淘客系统及省赚客APP创始人!今天我们来探讨在Java中如何实现高效的图像复原技术,特别是去雾和去雨算法的实现和优化。一、图像复原的概念与挑战图像复原是指在受到各种干扰的图像中恢复出原始的清晰图像。......
  • Java毕设项目II基于Java的英语知识应用网站
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言在全球化日益加深的今天,英语作为国际交流......