[置顶] Java的多线程状态及其他

时间:2023-02-14 18:17:29

1.要实现多线程,必须在主线程中创建新的线程,线程有5种状态,创建,就绪,运行,阻塞,终止。

2.一个正在执行的线程在某些特殊的条件下,如被人为挂起或者执行耗时的输入输出操作时,将让出CPU并中止自己的3.执行进入阻塞状态。在可执行的条件下如果调用sleep(),wait(),suspend等方法,线程将进入阻塞状态。阻塞时线程不能进入排队序列,只有引起阻塞的原因被消除后,线程才可以转入就绪状态。

4.线程调用stop()方法或者run结束,线程处于死亡状态,处于死亡状态的线程不具有运行的能力。

5.在线程操作中,如果没有为线程设置名字,系统将会给线程分配默认的线程名称,格式为Thread-Xx

6.Thread 类中的静态方法,public static Thread currentThread()返回当前正在执行的线程,是一个很有用的函数,不用实例化对象,Thread类就可以直接调用,如Thread.currentThread().getName().就获得了当前运行线程的名字。

7.java 程序每次运行至少启动了来两个线程,一个是主线程,另一个是用于实现垃圾回收机制的线程。

8.主线程有可能比其他线程先运行完,这是因为线程运行的不确定性,主线程在运行完后不一定对其他的线程有影响,并不会随着主线程结束而结束。

9.线程的强制运行

[置顶]        Java的多线程状态及其他

10.在程序中可以使用sleep()休眠,直接Thread.sleep()

11.当一个程序运行时,另一个线程可以通过inttrupt()方法中断其运行。

12.使用setDaemon()函数来实现后台线程的运行。

13.在java的线程中可以使用setPrority()来设置线程的优先级,分为三个优先级。线程根据其优先级的大小来决定哪个线程先运行,但是并不是哪个线程的优先级越高就一定先运行,哪个线程先执行将由CPU的调度决定。主方法的优先级是5,也就是NORM_PRORITY.

14.在线程的操作中可以使用yield()方法将一个线程的操作暂时交给其他线程执行。

15.java线程的同步与死锁。

如果多线程是用Runnable接口实现的,就意味着类中的属性将被多个线程共享,如果多个线程要操作同一类资源时,就有可能出现资源的同步问题,比如卖票时卖出了负票等。

如果一个线程正在使用一个资源时,加锁,不让其他试图使用该资源的线程进入,这样就可以了,这就是同步。

实现同步问题有2种方法:同步代码块方法和同步方法。

(1)同步代码块,即使用关键字Synchronized 关键字,定义为同步代码块。

  [置顶]        Java的多线程状态及其他

(2)同步方法,同样使用Synchronized关键字,只是在普通的方法前面加上了Synchronized 关键字,

Synchronized 方法返回值 方法名字(参数列表)

{

}


15.死锁问题

所谓死锁就是指两个线程都在等彼此先完成,造成程序的停滞,一般程序的死锁都是在程序开始时出现。

Object 类对多线程的支持---等待与唤醒,Object 类是所有类的父类,调用Object 的函数时,直接super.wait().

有两个唤醒线程的操作,一个是notify,另一个是notifyAll(),其中notify会唤醒第一个等待的线程,顺序执行;notifyAll()唤醒所有的线程,执行优先级高的线程。

16.线程的生命周期

suspend(),resume(),stop(),三个函数不推荐使用,如果使用了会有警告,这是因为他们易导致死锁。而且会出现@predecate 字样,这是不推荐使用的标志。不过开发中也有使用stop来停止死循环线程的。