多线程3-同步及生命周期

来源:互联网 发布:php error log 不生成 编辑:程序博客网 时间:2024/04/29 07:43

线程同步

1.同步代码块
 在代码块上“synchronized”关键字,则此代码块就称为同步代码块
2.同步代码块格式
 synchronized(同步对象){
  需要同步的代码;
 }
3.同步方法
 除了代码块可以同步,方法也是可以同步的
4.方法同步格式
 synchronized void 方法名称(){}

//没加同步的时候public class MyThread implements Runnable{    private int ticket=5;    public void run(){        for(int i=0;i<10;i++){            System.out.println("车票:"+ticket--);        }    }}//测试public class ThreadTest{    public static void main(String[] args){        MyThread mt=new MyThread();        Thread t1=new Thread(mt);        Thread t2=new Thread(mt);        Thread t3=new Thread(mt);        t1.start();        t2.start();        t3.start();    }}
//加同步代码块之后public class MyThread implements Runnable{    private int ticket=5;    public void run(){        for(int i=0;i<10;i++){            synchronized(this){                if(ticket > 0){                    try{                        Thread.sleep(1000);                    }catch(InterruptedException e){                        e.printStackTrace();                    }                    System.out.println("车票:"+ticket--);                }            }        }    }}
//加同步方法public void run(){    for(int i=0;i<10;i++){        tell();    }}public synchonized void tell(){    if(ticket > 0){        try{            Thread.sleep(500);        }catch(InterruptedException e){            e.printStackTrace();        }        System.out.println("车票:"+ticket--);    }}

生命周期

这里写图片描述
suspend()线程暂时挂起, resume()线程恢复运行, wait()暂停
此三个方法容易引起死锁

0 0
原创粉丝点击