前言大家好,一直以来最通俗的说法就是理解核心知识点,我认为所有的困难都离不开“基础知识”的基础。目前正在发布一个关于Java多线程的长期系列教程。从入门到高级,会有更大的空间。喜欢就点个关注吧??~适合有一定Java基础,想学习或了解多线程开发,想提升自己的人《大佬们可以绕过~》背景之前,跟大家讲过一些框架的使用。这些都是业务层面的东西。你需要掌握它们并在项目中使用它们,但是自身技术的积累很重要。远远不够。如果你想提升自己,你需要花更多的时间去挖掘语言本身,而不是局限于框架的使用。那为什么之前一直跟大家强调基础的重要性呢?框架可以千变万化,层出不穷。但基本原理是相同的。无论你是学习java、前端还是其他语言,你还是需要认清这一点。后面几期专门讲多线程,篇幅会比较长。耐心看完,你一定会有收获的~场景回顾上一期带大家学习了什么是进程,什么是线程,了解了它们的基本概念。本期正式学习Java多线程开发,本节主要介绍大家入门,了解一些常用的类和接口,一起来看看吧~Thread类在JDK中提供了一个Thread类,我们只需要继承这个类,我们可以实现多线程:publicclassThreadTest{publicstaticclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("hello2");}}publicstaticvoidmain(String[]args){MyThreadmyThread=newMyThread();//启用线程(不调用就不能启动)myThread.start();System.out.println("你好1");}}最后的结果输出:hello1hello2我们可以发现hello2很明显在上面运行,为什么输出是最后的,因为它启动了一个独立的线程执行,所以不会造成阻塞,所以调用start的时候,后面的代码将继续执行,而不用等待hello2的结果。那我可以多次调用start吗?这样可以多开几个线程吗,我们试试:publicstaticvoidmain(String[]args){MyThreadmyThread=newMyThread();我的线程.start();系统。out.println("你好1");myThread.start();}运行它:在com.thread.base.ThreadTest.main(ThreadTest.java)的java.lang.Thread.start(Thread.java:710):23)好家伙,直接报错,那到底是什么原因呢?为什么start()不能被多次调用?首先我们要明白,在Java中,线程是不允许启动两次的,第二次启动会抛出IllegalThreadStateException异常。那么为什么会抛出这个异常呢?我们只需要在start方法中找到抛出这个异常的地方即可。让我们看一下源代码:publicsynchronizedvoidstart(){/***这个方法不会被VM创建/设置的main方法线程或“system”*组线程调用。将来向此方法添加的任何新功能*也可能必须添加到VM。**零状态值对应于状态“NEW”。*/if(threadStatus!=0)thrownewIllegalThreadStateException();....}好家伙,点进去找找。意思是每次调用都会先判断threadStatus是否为0,这个0代表线程NEW状态,也就是说第二次调用的线程可能是非NEW状态。其实这里就涉及到了线程生命周期的概念。我先不跟你解释,以后再告诉你。在本节中,让我们先开始吧。Runnable接口我们还可以通过实现Runnable接口来启用多线程。让我们看一下:publicclassRunnableTest{publicstaticclassMyThreadimplementsRunnable{@Overridepublicvoidrun(){System.out.println("hello2");}}publicstaticvoidmain(String[]args){MyThreadmyThread=newMyThread();Threadthread=newThread(myThread);线。特征表达式也可以这样使用:newThread(()->{System.out.println("hello3");}).start();这样也可以启动多线程。结语本期到此结束。综上所述,本节主要讲Thread类和Runnable接口,带大家实际操作。你可以自己试试。
