首页 > 试题广场 >

以下程序的运行结果是?

[单选题]
以下程序的运行结果是?
  • foobar
  • barfoo
  • foobar或者barfoo都有可能
  • Bar
  • Foo
  • 程序无法正常运行
答案是 A foobar 这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.
编辑于 2017-06-29 15:46:43 回复(12)

调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体。
1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码
2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码, 这样就没有达到写线程的目的。

发表于 2017-08-26 16:41:50 回复(0)
又忘记线程调用的是使用start方法了,直接使用run方法就相当于直接调用run方法了。。。start是预备状态  准备执行!
发表于 2017-08-06 21:31:06 回复(2)
线程调用要用 start !!! 用run就变成了普通方法!!!
线程调用要用 start !!! 用run就变成了普通方法!!!
线程调用要用 start !!! 用run就变成了普通方法!!!
发表于 2020-03-26 10:31:42 回复(0)

.run是foobar 点start是两种都有可能


发表于 2018-08-06 20:12:15 回复(0)
不用继承Thread类的吗?
发表于 2018-06-10 23:27:19 回复(1)

注意点:

  1. 我们启动一个线程,必须调用start(),不能调用run()的方式启动线程。 如果再启动一个线程,必须重新创建一个Thread子类的对象,调用此对象的start().(注意后面的点)

  2. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式

  3. run(方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU调度决定。

  4. 想要启动多线程,必须调用 start方法。

  5. 一个线程对象只能调用一次 start()方法启动,如果重复调用了,则将抛出异常“lllegalThreadStateException”.

发表于 2021-11-20 11:04:01 回复(0)
实现Runnable还有匿名内部类的写法:
new Thread(new Runnable() {
           
@Override
           
public void run() {
               
// TODO Auto-generated method stub } }).start();
发表于 2019-02-22 21:25:42 回复(0)
用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时需等待run()方法执行完毕,才能继续执行下面的代码。所以run()方法并没有实现多线程。  
发表于 2017-09-03 14:09:17 回复(0)

调用 start()方法才会启动一个新的线程,直接调用 run()方法跟调用普通方法一样,直接执行该方法

发表于 2022-04-12 22:56:05 回复(0)
没有调用start,所以没有开启线程,只是调用了普通的run方法,所以是从上往下继续执行
发表于 2021-12-15 20:28:22 回复(0)
调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上执行,处于就绪状态
run()方法当做普通方法的方式调用,程序还是要按顺序执行
发表于 2018-10-30 16:02:34 回复(0)
接口不是不能创建对象吗?这怎么又能创建对象了,是因为后面的匿名类吗
发表于 2017-10-12 19:12:38 回复(2)
调用start才可以开启多线程
发表于 2022-06-10 11:46:42 回复(0)
  • 🤑start()方法可以让多个线程从新建态转换到就绪态从而进入等待队列,一旦一个线程获得CPU时间片即进入运行态会自动调用run()方法即线程的执行体。start()方法让多个线程从宏观上并发执行微观上串行实现系统资源利用率的最大化和极大提高系统的吞吐量。
  • 🤮run()方法即线程的执行体,当单独调用的时候就是一个普通的方法按照调用的顺序执行。
编辑于 2021-07-19 18:09:13 回复(0)
答案是 A foobar 这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.
发表于 2019-04-07 15:39:53 回复(0)
匿名内部类!!
编辑于 2017-07-02 10:29:52 回复(0)
  1. 线程只能通过调用start方法启动,如果调用的是run方法,它只是单线程,跟调用普通方法类似,程序任然是顺序执行的。
发表于 2023-02-25 23:00:25 回复(0)
start()方法来启动线程,真正实现了多线程的运行,这时无需等待方法体代码执行完毕,可以直接执行下面的代码
发表于 2018-12-17 22:33:13 回复(0)
没学过JAVA,怎么破?
发表于 2018-03-12 20:49:28 回复(0)