关于使用线程调用run方法的问题

问题描述

/** * */public class TwoThread extends Thread {private Thread creatorThread;public TwoThread(){creatorThread = Thread.currentThread();}public void run(){for(int i=0; i<5; i++){printMsg();}}public void printMsg(){Thread t = Thread.currentThread();if(t==creatorThread){System.out.println("Creator thread");} else if(t==this){System.out.println("New thread");}}/** * @param args */public static void main(String[] args) {TwoThread tt = new TwoThread();tt.start();for(int i=0; i<10; i++){tt.printMsg();}}} 大家好,该程序在调用tt.start()方法时为什么没有直接去调用run()方法,而是执行完for循环后才调用的run()方法?

解决方案

你的main方法执行是一个线程,你的那个自定义线程start,是另外一个线程,当main这个线程启动后,再启动你的自定义线程,从这个时候开始没有说哪个个线程就该先执行。
解决方案二:
引用大家好,该程序在调用tt.start()方法时为什么没有直接去调用run()方法,而是执行完for循环后才调用的run()方法?你不能设定到底那个先运行,那个后运行,这个与具体的系统底层也有关系的,你只能保证,这个线程确实要开始运行了。
解决方案三:
New threadCreator threadNew threadCreator threadNew threadCreator threadNew threadCreator threadNew threadCreator threadCreator threadCreator threadCreator threadCreator threadCreator thread这是我运行的输出
解决方案四:
其实方法的执行顺序是不确定的,你多执行几次就知道了

时间: 2024-07-28 15:17:04

关于使用线程调用run方法的问题的相关文章

在线程的run方法中执行页面跳转

问题描述 在线程的run方法中执行页面跳转 在做Android程序开发时,想在线程中休眠一段时间之后直接跳转到其他activity中,为什么不能再run方法中直接写. 解决方案 如果 是主线程的话那是肯定不行的直接程序崩溃,开启子线程的话是可以在run()里面写的.你可以用handle.postDlay()这样写,也可以用timeTask.schem()来

java线程问题-java当中的run方法是线程及其子类独有的吗

问题描述 java当中的run方法是线程及其子类独有的吗 java当中的run方法是线程及其子类独有的吗 如果不是,其他类调用run方法需要注意些什么问题 解决方案 是线程具体代码运行的入口,你不要在外部直接调用,否则就是同步的,达不到异步效果,你只需要start线程,它自己会执行run 解决方案二: JAVA run方法中得到线程名称java 线程 start 方法 跟 run 方法的区别Java线程中run和start方法的区别

java 线程中start方法与run方法的区别详细介绍_java

线程中start方法与run方法的区别 在线程中,如果start方法依次调用run方法,为什么我们会选择去调用start方法?或者在java线程中调用start方法与run方法的区别在哪里?  这两个问题是两个非常流行的初学者级别的多线程面试问题.当一个Java程序员开始学习线程的时候,他们首先会学着去继承Thread类,重载run方法或者实现Runnable接口,实现run方法,然后调用Thread实例的start方法.但是当他拥有一些经验之后,他通过查看API文档或者其他途径会发现start

Java线程中start和run方法全面解析_java

自定义线程两种方法 自定义一个runnable接口的实现类,然后构造一个thread,即对thread传入一个runnable接口类. new一个thread或者写个thread子类,覆盖它的run方法.(new 一个thread并覆盖run方法实际上是匿名内部类的一种方式) 示例代码 public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.

windows跨线程调用控件的方法

用户不喜欢反应慢的程序.在执行耗时较长的操作时,使用多线程是明智之举,它可以提高程序 UI 的响应速度,使得一切运行显得更为快速.在Windows 中进行多线程编程曾经是 C++ 开发人员的专属特权,但是现在,可以使用所有兼容 Microsoft .NET 的语言来编写. 不过Windows 窗体体系结构对线程使用制定了严格的规则.如果只是编写单线程应用程序,则没必要知道这些规则,这是因为单线程的代码不可能违反这些规则.然而,一旦采用多线程,就需要理解 Windows 窗体中最重要的一条线程规则

如何在普通类实例的线程过程中,同步调用执行在类实例自身所在的原来的那个线程中的方法

问题描述 如何在普通类实例的线程过程中,同步调用执行在类实例自身所在的原来的那个线程中的方法如后代码,是一个常见的实例,讲的是通过Control.Invoke在线程函数中,同步调用窗体主线程中的Form1实例的普通方法txt.但问题是,很多时候我们自己自定义的类,并不是从Control类继承的,从而也没有这个功能的Invoke方法供调用,这种类要怎么设计呢?虽然说用的示例代码是vb.net的,但严格来说,这个和语言无关,是一个.net开发的基本问题.ImportsSystemImportsSys

关于Java中停止线程执行的方法总结

Java中停止线程执行的方法 一.暂停或停止线程的理论 在Java编程中,要暂停或停止当前正在运行的线程,有几种方法.对于把线程转入睡眠Sleep状态,使用Thread.sleep()是最正确的方式.或许有人会问,为什么不使用等待wait()或通知notify()?要知道,使用等待或通知都不是很好的方式.线程可以使用等待wait()实现被阻塞,这属于条件等待的方式,当条件满足后,又会从阻塞转为等待状态.尽管可以在等待wait()条件那里放一个超时设置,但等待wait()的设计目的不是这样的,等待

关于Thread类中的start()方法和run()方法

问题描述 引用 解决方案 static class MyThread extends Thread { @Override public void run() { System.out.println("in MyThread() run()."); } } 你已经覆盖了Thread 的run方法,就没有什么target的说法了public void run() { if (target != null) { target.run(); } }解决方案二:public synchron

ASP.NET应用同步调用async方法崩溃解决

之前只知道在同步方法中调用异步(async)方法时,如果用.Result等待调用结果,会造成线程死锁(deadlock). 昨天一个偶然的情况,造成在同步方法中调用了async方法,并且没有使用.Result,结果造成整个ASP.NET应用程序的崩溃,见识了同步/异步水火难容的厉害. 当时的情况是这样的,发布了一个经过异步化改造的ASP.NET程序,其中有这样一个同步方法: public static void Notify(string title, string content, int r