多线程编程

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张票
原文地址:https://www.cnblogs.com/kwzblog/p/11833108.html