多线程

多线程的生命周期

   线程所拥有的状态:初始状态,可运行状态,运行状态,阻塞状态,锁池状态,等待队列,终止状态。

线程的生命状态:

1.当线程类被创建后就进入初始化状态。

2.当调用.start()方法时就拿到对象锁,进入可运行状态(一旦获取cpu资源就会进入运行状态)

3.当处于可运行状态的线程拿到cpu分配的时间片就进入运行状态。

  1)如果处于运行状态的线程的main方法或是run方法执行完,线程就进入终止状态。

  2)如果当前处于运行状态的线程调用sleep()方法或是join()方法,线程就进入阻塞状态。此时不释放资源(主要指对象锁)。当睡眠时间结束后进入可运行状态,等待获取cpu的时间片。

  3)当处于运行状态的当前线程调用yield方法,线程就会放弃当前时间片回到可运行状态。和其他线程再次竞争。

  4)当进入运行状态的线程调用wait方法后就会进入等待状态。只有调用了notify(只唤醒一个线程不确定唤醒哪个线程)或是notifyAll方法会后进入锁池状态。拿到对象锁标记后会进入可运行状态。

  5)当运行状态的线程发现要使用的资源被同步时,会进入锁池状态,当拿到对象锁后会进入可运行状态。

多线程的创建
多线程的实例解读
1. 多个窗口同时卖票,利用多线程模拟售票程序
package com.cnwir.test;

public class SaleTicket {
    public static void main(String[] args) {
        Ticket ticket =new Ticket(20);
        for (int i = 0; i < 5; i++) {//5个线程
            new Thread(new Seller(ticket),String.valueOf(i)).start();//线程启动
        }
    }
}
/**
 * 卖票线程类
 * @author administrator
 *
 */
class Seller implements Runnable{
    Ticket ticket;
    public Seller(Ticket ticket) {
        // TODO Auto-generated constructor stub
        this.ticket =ticket ;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while (ticket.has) {//如果有票继续售,否则终止售票
            ticket.sellerTicket();//
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
/**
 * 定义票信息类
 * @author administrator
 *
 */
class Ticket {
    private int ticketCount;
    protected boolean has=true ;//是否有票
    public Ticket(int ticketCount) {
        // TODO Auto-generated constructor stub
        this.ticketCount=ticketCount;
    }
    public synchronized void sellerTicket() {
        if(ticketCount>0){
            System.out.println(Thread.currentThread().getName()+"窗口卖第"+ticketCount+"张票");
            ticketCount--;
        }else{
            System.out.println("票已经售完!");
            has=false;//票已售完
        }
    }
    
}//end


转载于:https://my.oschina.net/yunsy/blog/280511

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值