「java线程知识点」线程相关知识

博主:adminadmin 2022-11-23 12:10:09 50

本篇文章给大家谈谈java线程知识点,以及线程相关知识对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java线程的几种状态

线程是一个动态执行的过程,它有一个从产生到死亡的过程,共五种状态:

1、新建(new Thread)

当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)

例如:Thread t1=new Thread();

2、就绪(runnable)

线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();

3、运行(running)

线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。

4、堵塞(blocked)

由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

正在等待:调用wait()方法。(调用notify()方法回到就绪状态)

被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)

5、死亡(dead)

当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

自然终止:正常运行run()方法后终止

异常终止:调用stop()方法让一个线程终止运行

java中的线程是个什么具体的内容?

这么说吧,电脑系统里有一个任务管理器,任务管理器中有许多进程,一个进程的下面又有很多线程。就是这个意思啊。

例如JAVA的main方法就是一个主线程,程序的执行顺序是自上而下的,如果这个程序没有在这个主线程上创建一个新的线程的话,程序就自上而下的执行,直到程序执行完闭。

如果你在这个主线程上,也就是main方法里创建了一个新的线程,那么这个时候就有两个线程,新的线程开始执行,这个时候主线程并不是停止了,而是一样的继续自上而下的执行,这个时候就有两条线程在执行代码了。

比如有一辆大卡车,遇到到了一个叉路口,这时大卡车就相当于主线程,这个时候只通往一条道路了,如果在叉路口上大卡车里出来了一辆小车,这个时候小车和大卡车分别向两条路上行驶,而并非大卡车会停下来,这个时候的状态就是两个线程在同时运行。

虽说这个比喻不是很好,但很形象!

说白了,我们以前写的那些简单的程序就只有一个线程,就是主线程(main方法),不管有多少判断,循环,它都是自上而下的执行,如果创建了另一个新的线程,这个时候就有两条线同时执行各自的任务了

java.关于线程同步的几个知识点

扩展:

为何要使用同步?    

因为java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),所以将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。

2.同步方法

有synchronized关键字修饰的方法。 

由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。

列:

public synchronized void save(){}

3.同步代码块

有synchronized关键字修饰的语句块。 

   

被该关键字修饰的语句块会自动被加上内置锁,从而实现同步

 

 

   

列:   synchronized(object){ }

4.用特殊域变量(volatile)实现线程同步

5.用重入锁实现线程同步

6.用局部变量实现线程同步

java多线程编程中涉及的基础知识点?

线程设计在软件开发领域中是非常常见的一个设计构成,今天昆明北大青鸟就一起来了解一下,java多线程编程中都涉及到了哪些基础知识点。

顺序

用于表示多个操作“依次处理”。比如把十个操作交给一个人来处理时,这个人要一个一个地按顺序来处理

并行

用于标识多个操作“同时处理”。比如十个操作分给两个人处理时,这两个人就会并行来处理。

并发

相对于顺序和并行来说比较抽象,用于表示“将一个操作分割成多个部分并且允许无序处理”。比如将十个操作分成相对独立的两类,这样便能够开始并发处理了。如果一个人来处理,这个人就是顺序处理分开的并发操作,而如果是两个人,这两个人就可以并行处理同一个操作。

总结

多线程程序都是并发处理的。如果CPU只有一个,那么并发处理就是顺序执行的,而如果有多个CPU,那么并发处理就可能会并行运行。

等待队列

所有实例都拥有一个等待队列,它是在实例的wait方法执行后停止操作的线程队列。就好比为每个实例准备的线程休息室

在执行wait方法后,线程便会暂停操作,进入等待队列这个休息室。除非发生下列某一情况,否则线程会一直在等待队列中休眠。

有其他线程的notify方法来唤醒线程

有其他线程的notifyAll方法来唤醒线程

有其他线程的interrupt方法来唤醒线程

wait方法超时

notify方法

该方法会将等待队列中的一个线程去除。同wait方法一样,若要执行notify方法,线程也必须持有要调用的实例的锁。

notifyAll方法

notify方法仅唤醒一个线程,而notifyAll则唤醒所有线程,这是两者之间的区别

同wait方法和notify方法一样,notifyAll方法也只能由持有要调用的实例锁的线程调用

notify和notifyAll选择

notify方法和notifyAll方法非常相似,到底该使用哪个?

实际上,这很难选择,由于notify唤醒的线程较少,所以处理速度要比使用notifyAll时快。但使用notify时,如果处理不好,程序便可能会停止。一般来说,使用notifyAll时的代码要比使用notify时的更为健壮。

关于java线程知识点和线程相关知识的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。