我们经常听到一些大型男人说一些概念,例如线程不安全,什么是不安全的线程?
为什么出现?
让我们看一下线程的6个状态
在运行时线程中调用wait(),part()和join()方法后,它将在等待状态线程中输入状态,将发布CPU时间胶片,并发布资源(例如锁定)。该状态将被释放。该状态将被释放。该状态将被释放。该状态将被释放。线程只能等待其他线程唤醒。
超时等待状态与等待状态相似,但是该状态的线程无需显着唤醒。超过一段时间后,该状态的线程将自动唤醒系统
有三种使用线程的方法,即实现可运行的接口,可可接口并继承线程类
实际上,我们建议这种方式实现可运行的接口,因为与其他两个相比,实现可可接口的方法更加麻烦,并且继承线程类的方法是继承。我们都知道它不在java.support多重继承中,而是支持多个实现,并使用它来实现可运行的接口。
在许多情况下,我们将在一个线程中调用另一个线程。目前,我们将使用加入方法
在这里,我们定义一个线程类,以便我们直接继承线程类
在这里我们定义了另一个线程类,但是在此线程类中,我们需要使用上一个线程
最后,我们创建了另一个测试类测试
显然,我们可以看到线程1在re -thread 2中称为线程1。
尽管线程2首先从这里开始,但线程1在线程2中调用,线程2将等待线程1完成并继续执行
在这里,我将简要讨论这些方法,因为这些方法不是来自JUC软件包,而是来自对象类下的对象类
我们经常比较这两种方法,因为它们正在等待我们的理解中的线程
实际上,它们非常不同
Wait()方法将发布我们之前已经知道的资源(锁定),而Sleep()方法将不会发布资源(锁定)
wait()方法基于对象,而sleep()是基于线程类的方法
在JUC中,我们使用这些方法来实现线程之间的调度
此方法显然是等待(),这更灵活
说到线程池,我们必须提及线程池的七个参数。
线程池如何创建线程?
原始:https://juejin.cn/post/7097417085164191751