多线程编程
作者:互联网
1.基本概念
进程:内存中正在运行的一个应用程序。一个进程包含多个线程。
线程:进程中的一个执行流程。
多线程:有两个或两个以上的并发执行流程。
2.线程的生命周期
说明:
1. 新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。
2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。
3. 运行状态(Running) : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
4. 阻塞状态(Blocked) : 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
(01) 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。
(02) 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
(03) 其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
5. 死亡状态(Dead) : 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
3.线程的实现方式
线程的实现主要有2中方式
一、实现Runnable接口
Runnable 是一个函数式接口,该接口中只包含了一个run()方法
Runnable的作用,实现多线程。我们可以定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程。
package org.langtong.javademo; public class MyRunnableThread implements Runnable { //定义总票数 private int ticket = 100; //定义编号 private int no = ticket+1; //定义线程同步对象 private Object ob = new Object(); @Override public void run() { while (true){ synchronized (this.ob){ if(this.ticket>0){ try { Thread.sleep(100); }catch (Exception e){ } System.out.println(Thread.currentThread().getName()+"售出第"+(this.no-this.ticket)+"张票"); this.ticket--; }else { System.out.println("票已卖完!"); System.exit(0); } } } } }
package org.langtong.javademo; /** * 多线程买票 * 3个人卖10张票 */ public class MultiThreads { public static void main(String[] args) { MyRunnableThread myRunnableThread = new MyRunnableThread(); Thread t1 = new Thread(myRunnableThread); Thread t2 = new Thread(myRunnableThread); Thread t3 = new Thread(myRunnableThread); Thread t4 = new Thread(myRunnableThread); t1.start(); t2.start(); t3.start(); t4.start(); } }
Thread-0售出第2张票 Thread-0售出第3张票 Thread-0售出第4张票 Thread-0售出第5张票 Thread-3售出第6张票 Thread-1售出第7张票 Thread-2售出第8张票 Thread-1售出第9张票
标签:状态,Thread,张票,编程,售出,线程,new,多线程 来源: https://www.cnblogs.com/kwzblog/p/11833108.html