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

java入门避坑必读,通过Thread类创建java多线程

欲善编程,多看、敲、讨论;动眼、手、大脑。

1 为什么要用多线程

平常我们做crud的时候,用到多线程的机会不多。但当我们要处理一些复杂的业务时,或者提高程序处理效率时,就绕不开多线程的使用。也有些时候,我们需要对某个接口进行并发测试,也可以通过多线程来做一个性能测试小程序。

2 创建一个java线程类

我们先创建一个ThreadDemo类,并在里面创建一个MyThread内部类,MyThread继承Thread类。继承之后,MyThread就是一个线程类了,具备了线程类的所有属性。可以被主程序反复调用执行,不会导致主程序的堵塞。MyThread类代码如下图。

继承Thread类,实现run方法,是线程类的核心。本次线程实现了一个从1到100的报数功能。

3 启动线程

想要让线程跑起来,可以执行start()方法。注意,这里有一个很容易入的坑,我们创建线程对象后,调用的是线程对象的start的方法,而不是run方法。虽然两个方法都能执行run里面的代码。但本质上是不一样的。接下来小编将展示start和run的区别。

先创建三个不同的MyThread对象,并用线程的start方法启动。效果如下。

从上面的截图我们可以看到,虽然我们在主程序里,先执行线程A,但先报数的是线程B,当线程B报到4的时候,线程C开始报数,说明线程ABC在同时报数,而且每次执行,ABC三个线程报数顺序都不一样。

接下来,我们再看一看调用线程run方法。

你会发现,不管你执行多少次,都是线程A先报数报到100,再是线程B,再是线程C。很明显,run方法是在ThreadDemo类的主线程上执行,并没有创建新的线程去执行。

4 线程异常

我们不能对同一个线程同时执行start方法,比如刚才创建的线程A,同时调用两次start方法,这时第二次启动时会抛出异常:IllegalThreadStateException。异常效果如下图。

如果需要执行多次,就必须再new一个线程对象去start。

5 线程和进程

线程和进程类似,都是操作系统调用cpu来运行程序的单元。大家只要记住一点,线程是执行的最小单元,一个进程可以有一个或多个线程。

6 结束语

人人都是程序员,感谢您的阅读,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200227A04M2E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券