多线程复习
2021-04-15 03:28
标签:释放 name 资源 使用 lazy sleep 次数 不能 com 进程:系统运行的基本单元,当我们启动一个程序,就是一个进程从创建、运行到消亡的过程。进程可能会经历各种不同的状态,一般来说有三种状态。 状态转换: 就绪态的进程得到cpu调度就会变为执行状态,执行态的进程如果因为休眠或等待某种资源就会变为等待状态,执行态的进程如果时间片到了就会重新变为就绪状态放入就绪队列末尾,等待状态的进程如果得到除cpu以外的资源就会变为就绪状态注意处于等待状态的进程不能直接转变为执行状态,而首先要变为就绪状态,哪怕系统中只有一个进程。 线程:线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。 新建:就是刚使用new方法,new出来的线程; 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行; 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能; 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态; 销毁:如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源; java程序可以有两种方式创建执行线程,一是通过继承该类来构建自己的线程类,Thread类是一个实现Runnable接口的原生类,二是直接实现Runnable接口来构建自己的线程类。 多线程复习 标签:释放 name 资源 使用 lazy sleep 次数 不能 com 原文地址:https://www.cnblogs.com/jinit/p/13334021.html目录
一、线程与进程
二、java的线程使用
一、线程与进程
线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。
二、java的线程使用
2.1通过继承Thread使用
UserThreadOne.java
public class UserThread extends Thread {
private String threadName;
private int index;
private static final int LOOP_NUM = 100;
public UserThread() {
this.threadName = "";
}
public UserThread(String name) {
this.threadName = name;
this.index = 0;
}
@Override
public void run() {
while (index
ThreadTest.java
public class ThreadTest {
public static void main(String[] args) {
UserThread threadA = new UserThread("线程A");
UserThread threadB = new UserThread("线程B");
threadA.start();
threadB.start();
}
}
执行结果:
2.2通过实现Runnable使用
UserRunnable.java
public class UserRunnable implements Runnable {
private String threadName;
private int index;
private static final int LOOP_NUM = 100;
public UserRunnable() {
this.threadName = "";
}
public UserRunnable(String name) {
this.threadName = name;
this.index = 0;
}
@Override
public void run() {
while (index
ThreadTest.java
public class ThreadTest {
public static void main(String[] args) {
/*UserThread threadA = new UserThreadOne("线程A");
UserThread threadB = new UserThreadOne("线程B");*/
UserRunnable runnableA= new UserRunnable("线程A");
UserRunnable runnableB = new UserRunnable("线程B");
Thread threadA = new Thread(runnableA);
Thread threadB = new Thread(runnableB);
threadA.start();
threadB.start();
}
}
下一篇:Networkx算法Cuts