首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java多线程:执行对象方法的线程是否取决于创建它的线程上的线程?

Java多线程执行对象方法的线程并不取决于创建它的线程上的线程,而是取决于对象方法所在类的实例。

Java中的多线程是通过线程池来实现的,线程池是一种线程管理机制,它可以在需要时动态创建、启动、停止和销毁线程。在Java中,线程池的创建和配置是由Java虚拟机(JVM)控制的,而线程池中的线程则是由Java应用程序控制的。

当Java应用程序调用一个对象方法时,该方法会在Java虚拟机中执行。如果该方法是由一个线程池中的线程调用的,那么线程池中的线程就会创建一个新的线程来执行该方法。这个新线程的创建和启动是由Java虚拟机控制的,而不是由创建它的线程控制的。因此,Java多线程执行对象方法的线程并不取决于创建它的线程上的线程,而是取决于对象方法所在类的实例。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java多线程01——多线程创建

每一个进程可以说就是一个可执行应用程序 线程不能够独立执行,必须依存在应用程序中 2 创建线程五种方式 2.1 继承 Thread 类 通过继承Thread并且重写其run()方法,run(...创建子类通过调用start()方法即可执行线程方法。 注意: 通过继承Thread创建线程类,多个线程间无法共享线程实例变量。 需要创建不同Thread对象,自然不共享资源。...接着创建Runnable实现类对象,作为创建Thread对象参数target,此Thread对象才是真正线程对象。 利用实现Runnable接口线程创建对象,可以实现线程之间资源共享。.../* 定义线程类,实现 Runnable接口 重写run()方法 创建实现类对象 创建Thread类,并将线程对象参数传入Thread构造方法中 启动线程 */ public class UserRunnable...多线程类 import java.util.Date; import java.util.TimerTask; /** * 创建 UserTimer 类,继承 TimerTask 抽象类 * 创建

14820

多线程(一):创建线程线程常用方法

了解并发编程:实际工作中很少写多线程代码,这部分代码一般都被人封装起来了,在业务中使用多线程机会也不是很多(看具体项目),虽然代码中很少会自己去创建线程,但是实际环境中每行代码却都是并行执行,同一时刻大量请求同一个接口...程序运行时系统就会创建一个进程,并为分配资源,然后把该进程放入进程就绪队列,进程调度器选中时候就会为分配CPU时间,程序开始真正运行。 2....多线程创建方式 继承 Thread 实现 Runable 实现 Callable ①:继成java.lang.Thread, 重写run()方法 public class Main {...new)状态: 准备好了一个多线程对象,即执行了new Thread(); 创建完成后就需要为线程分配内存 就绪(runnable)状态: 调用了start()方法, 等待CPU进行调度 运行(running...方法时,调用对象线程就会InterruptedException异常”, 其实这是一种误解,实际interrupt方法只是改变了线程“中断状态”而已,所谓中断状态是一个boolean值,表示线程是否被中断状态

95530

java多线程java线程创建线程生命周期

* 在Java创建线程有两种方法:使用Thread类和使用Runnable接口。...* 因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或子类实例。...* void join() throws interruptedException; * * 7)线程创建后不会立马就执行run中代码,而是处于等待状态。...可以通过Thread类方法设置线程各种属性 * 如: 线程优先级 (setPriority) 线程名(setName) 线程类型 (setDaemon) 等 * 调用start方法后,线程开始执行...* 可以调用isAlive 判断线程是否处于运行状态 , 运行 返回 true ,否则 返回 false(可能线程处于等待状态,也可能处于停止状态) * 8)执行run后,就会一直运行直到这个线程执行完成后退出

40520

Java 多线程(3)---- 线程同步(

Java 多线程(1)— 初识线程Java 多线程(2) — 线程控制。...这篇文章我们来继续讨论 Java 多线程线程同步。 Java 内存模型 在开始介绍线程同步之前,我们必须要对 Java内存模型(这里是针对线程角度上来看)有一个大概理解。...现在我们知道,如果一个 Java 线程要修改主内存中某个数据,必须经过下面几个步骤: 1、这个线程私有工作内存读取在主内存中要修改那个数据值并且拷贝一份副本留在该线程工作内存中; 2、线程执行相关代码在其工作内存中修改这个从主内存拷贝过来副本值...在操作系统中定义是:对于一个操作来说,如果执行,那么在执行过程中不会被其他因素打断直到完成这个操作,否则这个操作就不执行。我们称这个操作具有原子性。...方法,这个方法是进行数据输出方法(即为 IO 操作),还记得我们在第一篇文章:Java 多线程(1) — 初识线程 中提到:IO 操作可能会导致线程让出 CPU 进入等待状态吗?

69120

创建多线程方法---1创建Thread类子类及多线程原理

创建多线程方法 创建多线程第一种方式:创建Thread类子类 Java.lang.Thread类:是描述线程类,我们想要实现多线程程序,就必须继承Thread类。...实现步骤: 1.创建一个Thread类子类。 2.在Thread类子类中run方法,设置线程任务(开启线程要做什么)。 3.创建Thread类子类对象。...4.调用Thread类中方法start()方法执行run方法。 void start()使用该线程开始执行Java虚拟机调用该线程run方法。...结果是两个线程并发运行,当前线程(main线程;也叫主线程)和另一个线程创建线程执行其run方法)。 多次启动一个线程是非法。特别是当线程已经结束执行后,不能再重新启动。...Java程序是抢占式调度,哪个线程优先级高 先执行哪个,同一个优先级随机选一个执行。 示例: 主方法: 结果:两个线程在抢占CPU执行时间。 多线程随机打印原理:

44830

java多线程——线程状态

不过,这种方法已经不再推荐。应该从运行机制减少需要并行运行任务数量。如果有很多任务,要为每个任务创建一个独立线程所付出代价太大了。可以使用线程池解决这个问题。...注意 不要调用Thread类或者Runnable对象run方法,直接调用此方法,只会执行同一个线程任务,而不会启动新线程。应该调用thread.start方法。...这个方法创建一个执行run方法线程线程中断 当线程run方法执行方法最后一条语句并由执行return语句返回时,或者出现了在方法中没有捕捉异常时,线程将终止。...isInterrupted方法是一个实例方法,可用于检测是否线程被中断,并不会改变中断状态。 多任务与多线程区别 多任务(multitasking):在同一刻运行多个程序能力。...多线程(multithreaded):一个程序同时执行多个任务,可以同时执行一个以上线程程序称为多线程程序。 多进程与多线程本质区别在于:每个进程拥有自己一整套变量,而线程则共享数据。

70730

java多线程Java 多线程同步五种方法

Java 多线程同步五种方法 一、引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊。闲话不多说,进入正题。...二、为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象状态出现混乱,从而导致程序异常。...由于java每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。...原理是每次要线程要访问volatile修饰变量时都是从内存中读取,而不是存缓存当中读取,因此每个线程访问到变量值都是一样。这样就保证了同步。...()还有一个可以创建公平锁构造方法,但由于能大幅度降低程序运行效率,不推荐使用 Bank.java代码修改如下: package threadTest; import java.util.concurrent.locks.Lock

64110

JAVA 多线程——实现创建线程五种写法

前言 友友们大家好,我是你们小王同学 今天给大家带来JAVA 多线程——实现创建线程五种写法 希望能给大家带来有用知识 小王主页:小王同学 小王gitee:小王同学 小王...github:小王同学 通过继承Thread类并实现run方法创建一个线程 // 定义一个Thread类,相当于一个线程模板 class MyThread01 extends Thread {...// 重写run方法// run方法描述线程执行具体任务@Overridepublic void run() { System.out.println("hello, thread...[] args) { // 实例化一个线程对象 MyThread01 t = new MyThread01(); // 真正去申请系统线程,参与CPU调度...t.start(); } } 通过实现Runnable接口,并实现run方法方法创建一个线程 // 创建一个Runnable实现类,并实现run方法 // Runnable

40810

Java 多线程系列(2) —— 线程常用方法

中断线程 Java 线程使用一种机制来表想要终止他。这个中断机制依靠线程对象来检查当前线程是否需要中断,同时对象也可以决定是否响应中断请求。...Java 中断线程方法为 Thread.interrupt(),该方法会读取中断标志位并重置中断标志位。...obj.notify(); ... } 当我们在执行过程中,线程已经不满足继续执行条件导致阻塞,那么我么需要释放相应资源,但同时我们又不能破坏线程操作原子性,那么这个时候我们只需要释放对象所持有的锁即可...线程礼让 线程礼让方法为 Thread.yield() 方法时暂停当前正在执行线程,也可理解为线程让出当前执行时间片给其他线程。在礼让过程中不会释放锁。...join 方法类似于 wait 方法,会释放锁,只不过 join 方法释放是正在执行 thread 对象锁。 方法掉用时线程状态转换图 ?

37830

Java多线程数据安全(同步线程方法)

(): API中解释: 暂停当前正在执行线程对象,并执行其他线程。...注意:这里其他也包含当前线程,即,当前线程也能够再次抢占CPU。 Thread.sleep(long millis): API解释:使当前线程暂停millis所指定毫秒,转到执行其它线程。...上述错误就是典型多线程访问数据错误。...线程A抢到了CPU; 线程B打印出线程B@:100,其实此时num == 93,只是原来把100数据已经写进了程序堆栈中; 接着线程B继续执行代码,num自减,即num == 92; 下面就是线程B愉快执行代码了...线程B获取CPU,执行了代码1; 线程B进入同步代码块,执行了代码2,但还没有退出同步代码块时候,线程A抢到了CPU; 线程A执行了代码1,但是无法进入同步代码块,只能等待,这时候线程B获得了CPU,

45220

创建多线程几种方法

创建多线程几种方法Python创建多线程主要有如下两种方法:函数类接下来,我们就来揭开多线程神秘面纱。1....用类创建多线程相比较函数而言,使用类创建线程,会比较麻烦一点。首先,我们要自定义一个类,对于这个类有两点要求,必须继承 threading.Thread 这个父类;必须复写 run 方法。...线程对象方法上面介绍了当前 Python 中创建线程两种主要方法创建线程是件很容易事,但要想用好线程,还需要学习线程对象几个函数。...经过我总结,大约常用方法有如下这些:# 如上所述,创建一个线程t=Thread(target=func)# 启动子线程t.start()# 阻塞子线程,待子线程结束后,再往下执行t.join()#...判断线程是否执行状态,在执行返回True,否则返回Falset.is_alive()t.isAlive()# 设置线程是否随主线程退出而退出,默认为Falset.daemon = Truet.daemon

9200

Java多线程--对象可见性

最近在看《Java并发编程实战》,并发方面的知识,今天看到了对象可见性,在这里分享一下。   ...在单线程环境中,如果向某个变量写入值(比如全局变量),在没有其他操作写入情况下,总是能得到想要值(因为在单线程环境中是线程安全)。但是如果在多线程环境中,这个情况就会被打破。...因为我们在执行某一线程读操作时候,其实并不知道是否有其他线程正在进行写操作,所以我们上面说到可见性就在这里展开命题,我读操作时候要知道另一个线程在写操作,这就是线程安全性。...而且如果有一个读线程操作时候,我们给number赋值了42,但是它可能得到仍然是0这个失效值,这里只是int类型读取错误,如果我们在要求很严环境中,读到一个失效引用对象,这个对象后续操作不可操作...因为set和get没有加同步,正如我们上面说到一样,可能得到结果和我们想要差距很大,因此这里也不是线程安全,如果想要线程安全,就要在方法上面加同步锁。

76540

Java多线程基础(线程与进程区别,线程创建方式及常用api,线程状态)

Java线程是以轻量级进程来实现 Java中,线程既然是以轻量级进程实现,那它也具有进程特征: 需要系统调度CPU来执行 并发:一个CPU以时间调度轮转方式依次执行每个线程 并行:...Thread常见构造方法 方法 说明 Thread() 创建线程对象 Thread(Runnable target) 使用Runnable对象创建线程对象 Thread(String name) 创建线程对象并命名...后台线程:JVM会在一个进程所有非后台线程结束后,才会结束运行 是否存活:简单理解为run方法是否运行结束 中断:下面板块中介绍 3....介绍说明常用方法 Thread有静态方法也有实例方法: Thread.静态方法() thread对象.实例方法() 线程中断(重点掌握) 实现线程中断操作:设置一个标记位,表示是否被中断,线程执行时循环判断是否被中断...线程状态(面试常问) ‍️说明: NEW:Thread对象已经创建好了,但是还没有调用start RUNNABLE:处于就绪队列中,随时可以被调度到CPU BLOCKED:当前线程在等待锁,

15720

新手学JAVA(十)-多线程----线程创建和启动

Java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类实例。每个下次你哼作用是完成一定任务,实际就是执行一段程序流(一段顺序执行代码)。...Java使用线程执行体来代表这段程序流 在Java线程创建有三种方式 通过继承Thread类创建线程类 ---- 步骤如下 定义Thread类子类,并重写该类run()方法,该run(...因此把run()方法称为线程执行体。 创建Thread子类实例,即创建线程对象。 调用线程对象start()方法来启动线程。...创建Runnable实现类实例,并以此实例作为Threadtarget来创建Thread对象,该Thread对象才是真正线程对象。 调用线程对象start()方法来启动该线程。...使用FutureTask对象作为Thread对象target创建并启动新线程。 调用FutureTask对象get()方法来获得子线程执行结束后返回值。

38810

Java 多线程(2)---- 线程控制

包括线程优先级、如何创建一个线程(通过继承 Thread 类或者通过新建 Runnable 对象并作为参数传入 Thread 构造方法中)、线程声明周期状态(新建状态、运行状态(就绪状态、正在运行状态...如果你对线程一些概念还不熟悉,建议先从第一篇文章看起:Java 多线程(1)— 初识线程,当然,大神请无视这句话。 这篇文章我们来看一下 Java 多线程中对线程控制。...如果我们需要暂停一个正在执行线程时,我们可以通过调用该线程对象 sleep(long millis) 方法来让该线程休眠指定秒数,调用这个方法之后线程将会让出 CPU 进入休眠,休眠完成之后线程并不会直接获得...: Thread.currentThread() // 静态方法,返回执行当前代码线程对象引用 Thread.isInterrupted() // 实例方法,返回调用这个方法线程对象中断标志(true.../ false) Thread.interrupt() // 实例方法,将调用这个方法线程对象中断标志设置为 true, // 请注意:线程中断标志本身不会影响线程执行

67840

多线程是同时执行多个线程

相信多线程各位大佬都用过,不管是在单核cpu还是多核cpu都可以执行,但是多线程是同时执行多个线程吗?...并发和并行: 并发: 解释1:当有多个线程在操作时,如果系统只有一个CPU,则根本不可能真正同时进行一个以上线程只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段线程代码运行时...解释2:对于单核cpu来说,多线程并不是同时进行,操作系统将时间分成了多个时间片,大概均匀分配给线程,到达某个线程时间段,该线程运行,其余时间待命,这样从微观看,一个线程是走走停停,宏观感官...在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观这些程序只能是分时地交替执行。...结论: 单核cpu是系统将时间分割成时间段交由不同线程执行,所以实际单核cpu同一时间是只存在一个线程

96550

多线程编程学习五(线程创建)

b、线程缺乏统一管理,可能无限制新建线程,相互之间竞争,极可能占用过多系统资源导致死机 或者 OOM。        c、缺乏更多功能,如定时执行、定期执行线程中断。...Java提供四种线程好处在于:        a、重用存在线程,减少对象创建、消亡开销,性能佳。        ...二、Executors 创建线程Java通过Executors提供四种线程池,分别为: newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,...newSingleThreadExecutor 创建一个单线程线程池,只会用唯一工作线程执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。 ?...三、ThreadPoolExecutor 创建线程线程池不建议使用Executors去创建,而是通过ThreadPoolExecutor方式,这样处理方式让写同学更加明确线程运行规则,规避资源耗尽风险

1K110

Java 多线程(4)---- 线程同步(中)

前言 在前一篇文章: Java 多线程(3)— 线程同步() 中,我们看了一下 Java内存模型、Java代码对应字节码(包括如何生成 Java 代码字节码和某些字节码含义)并且分析了...那么现在问题就是如何检测在某个时刻是否有某个线程正在执行 sell 方法,但是 Java 并没有提供相关 API。...这可以使用 isHeldByCurrentThread() 方法和 getHoldCount() 方法进行检查当前执行代码线程是否拥有这个锁和某个锁对象线程所占有的次数。...可以看到,这个结果就是正确,当然我们不能确定每张票每一次运行是具体由哪个线程卖出,因为多线程并发调度结果是不定,这取决于线程调度器调度结果。...,synchronized 关键字会检测当前对象是否已经被其他线程获取, // 如果是,那么当前线程会陷入阻塞,直到获取当前对象线程释放当前对象锁 // 否则当前线程就获取当前对象锁并进入方法执行代码

94530
领券