首页 > 其他分享 >线程

线程

时间:2023-08-14 21:15:14浏览次数:23  
标签:run Thread 对象 线程 方法 public

1、多线程

    1.1 线程与进程

      · 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序基本单位;系统运行一个程序即是一个进程从创建,运行到消亡的过程。

      · 线程:线程是进程中的一个执行单元,负责当前进程中的执行,一个进程中至少有一个线程。一个进程中是可以多个线程的,这个应用程序也可以称之为多线程程序。

    1.2创建线程类

      Java 使用 Thread 类代表 线程 ,所有的线程对象都必须是Thread类或其子类的实列。每个线程的作用是完成一定的任务,实际就是执行一段程序流即一段顺序执行的代码

      1、定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表线程需要完成的任务,因此把run()方法称为线程执行体。

      2、创建Thread子类的实例,即创建了线程对象

      3、调用线程对象的start()方法来启动该线程

    

2、多线程详解

      2.1 Thread类

        构造方法:

        · public Thread() : 分配一个新的线程对象

        · public Thread( String name) : 分配一个指定名字的新的线程对象。

        · public Thread( Runnable target) : 分配一个带有指定目标的新线程对象。

        · public Thread( Runnable target,String name) : 分配一个带有指定目标的新线程对象并指定名字。

        常用方法:

        · public String getName() : 获取当前线程名称。

        · public void start() : 导致此线程开始执行;Java虚拟机调用此线程的run方法。

        · public void run() : 此线程要执行的任务在此处定义代码。

        · public static void sleep(long millis) : 使用当前正在执行的线程以指定的毫秒数暂停。

        · public static Thread currentThread() : 返回对当前正在执行的线程对象的引用

        

      测试类:

      

      自定义线程类:

      

      运行:

          

      2.2 Runnable类

          Runnable 也是非常常见的一种,我们只需要重写run方法即可。

          1、定义Runnable 接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程执行体。

          2、创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Theater对象才是真正的线程对象。

          3、调用线程对象的start()方法来启动线程。

            代码如下:

              

 

 

            

      3、线程安全

            如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的
        而且其他的变量的值也和预期的是一样的,就是线程安全的。

        实体类:

          

        测试类:

          

        运行结果:

          

        1、同样的票数,比如98这张票被卖了两次

        2、不存在的票,比如0票-1票,是不存在的

        这个问题,几个窗口(线程)票数不同步了,这种问题称为线程安全性问题。

      4、线性安全问题解决方法

        -- synchronized 锁

          · 同步代码块:synchronized 关键字可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问

          对于非static方法,同步锁就是this

          对于static方法,我们使用当前方法所在类的字节码对象(类名.Class)

          格式:

            

 

        

 

      -- Lock锁

        Lock机制提供了比 synchronized 代码块和 synchronized 代码块和 synchronized 方法更广泛的锁定操作,同步代码/同步方法具有的功能

        ·public void lock() : 加同步锁

        ·public void unlock() : 释放同步锁

        

 

标签:run,Thread,对象,线程,方法,public
From: https://www.cnblogs.com/PHOEDE/p/17629729.html

相关文章

  • java高级之多线程
    1.什么是多线程首先引入程序与进程概念:程序(program)程序是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码(还没有运行起来),静态对象。进程(process)进程是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源。这是一个动态的过......
  • 使用线程实现ACB的顺序输出
    在java中可以使用join方法来实现,join会阻塞当前方法,调用的当前方法执行结束后,才会继续往下执行!publicclassFoo{publicFoo(){}publicvoidA(){System.out.println("A");}publicvoidB(){System.out.println("B");}......
  • 创建线程的有哪些方式?创建线程的三种方式的对比?
    ##引言多线程编程是现代软件开发中的重要部分之一。通过利用多线程可以提高程序的并发性和响应能力。在Java中,创建线程的方式有多种,每种方式各有优缺点。本文将介绍创建线程的三种主要方式,并对它们进行比较和对比。继承Thread类继承Thread类是创建线程的一种常见方式。它的特点......
  • .net中如何证明List<int>是线程非安全的
      我们可以通过以下代码来验证List<int>为何是线程非安全的,执行以下代码,然后查看输出结果。  staticvoidMain(){vartoCount=100;#regionlist线程非安全varlist=newList<int>();//并行添加元素Parallel......
  • 聊聊 Java 虚拟线程
    转载:https://www.modb.pro/db/633787Java虚拟线程(VirtualThreads)是Java平台上的一个新特性,它们是一种轻量级的执行上下文,可以更高效地利用CPU资源,提高程序的并发性能。在本文中,我们将探讨Java虚拟线程的概念、设计原理、使用场景以及与传统线程的比较等方面。什么是Java......
  • 汪文君->多线程教程
    汪文君-多线程教程第一阶段多线程介绍多线程编程入门多线程创建与启动以及线程状态Runnable接口详细详解线程优先级以及守护线程详解线程同步线程间通讯线程组详解自运行对象详解线程异常回调线程池详解等待线程完成任务阻塞io和多线程详解如何优雅的结束线程自定......
  • 8.0 Python 使用进程与线程
    python进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。线程和进程都......
  • 8.0 Python 使用进程与线程
    python进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。线程和进程都可......
  • C# System.InvalidOperationException:“线程间操作无效: 从不是创建控件“****”的线
     在程序主入口,构造函数加载时,添加如下代码//如果捕获了对错误线程的调用,则为true;否则为falseSystem.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=false;解释:多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,这时如果想要访问窗口的控......
  • 多线程
    多线程1.概述程序是指令和数据的有序集合,是一个静态的概念进程是执行程序的一次执行概念,是一个动态的概念线程是CPU调度和执行的单位,一个进程至少有一个线程2.Thread2.1创建线程2.1.1extendsThread两条线程是并行交替执行线程不一定立即执行packagedemo01;p......