Java牛角尖【008】: 可以通过调用一个线程的run方法启动一个线程吗?

  我们知道,我们通过调用线程的start方法启动一个线程,那么,我们可以直接调用run方法来启动一个线程吗?

  先看下面一段代码:

  运行结果如下:

  或许有人会得出结论,这样启动一个线程是可以的,我们再对程式稍做修改,大家就会发现一个问题:

  这里只在主线程中加入了一行代码,打印一行"Printed by main thread",运行代码,结果如下:

  熟练多线程开发的要发现问题了,为什么"Printed by main thread"会打印在最后一行呢?TestThread类中一直持有时间段吗?

  我们对上面的代码进行分析,其实非常简单,这只是一个普通的类中方法的调用,其实是一个单线程的执行,我们来修改代码进一步验证这一点:

  这段代码分别在主线程和我们的TestThread的方法中打印当前线程名字,运行结果如下:

  在TestThread类和主线程中运行的是同一个线程,说明在直接调用run时是不能使用多线程的,那么把上面的run方法调用改为start方法的调动再看一下:

  运行结果如下:

  很明显,这才是我们想看到的结果,所以结论是只有调用Thread的start方法,将线程交由JVM控制,才能产生多线程,而直接调用run方法只是一个普通的单线程程式。

 

  下一篇: Java牛角尖【009】: 多线程中synchronized的锁定方式

设计一个Scratch程序来根据输入的年份显示对应的生肖。首先,创造一个虚拟角色,命名为“生肖查询”。在虚拟角色的外观中选择一个代表中国文化的图标,如龙或属牛的牛角。 然后,在程序设计区域内创建一个“当Flag被点击”事件块,将其连接至一个“询问并等待”块。在“询问并等待”块中,将文字提示设置为“请输入年份”来引导用户输入年份。 接下来,创建一个“变量设置”块,命名为“年份”,并将其设定为输入的年份。然后,创建一个“判断”块,将其放置在“变量设置”块的下方。 在判断块的条件中,使用“余数为零”运算符来判断年份与属相的对应关系。首先将“年份”变量与12进行求余运算,然后使用“等于”运算符将结果与0进行比较。若余数等于0,即年份能整除12,就说明这一年对应的是“猴”生肖。 在判断块的“是”分支中,使用一个“造型设置”块来改变虚拟角色的外观,将其显示为猴年的形象。你可以添加一些动画效果,如挥动手臂或跳动的尾巴,使动画更生动。 在判断块的“否”分支中,继续添加判断块,以此类推判断年份与其他生肖的对应关系。根据属相的顺序,每选择一个生肖,你可以给虚拟角色设置一个相应的外观。 最后,在每个生肖的判断块的“是”分支中,使用一个“广播”块来发送一个消息或者播放一段音效,以提示用户该年属相是什么。如果你需要的话,在每个判断块的“是”分支后可以添加一个“停止全部广播”块,以确保只有一个生肖被识别。 编写完程序后,你可以点击Flag来启动程序。输入年份后,虚拟角色会根据输入的年份展示对应的生肖形象,同时发送一个信息或播放一个音效,告知用户对应的属相。这个程序可以帮助用户快速查询输入年份对应的生肖,提升了传统文化的传承和认知。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值