07---多线程03

来源:互联网 发布:c语言开发工具 编辑:程序博客网 时间:2024/06/08 19:17
 

1.中断线程的运行:
 当一个线程运行的时候,另一个线程可以调用对应的Thread的对象的
  interrupt()方法来中断它;
  public void interrupt();

2.判断线程是否中断:
 public boolean isInterrupted();

3.多线程资源协调问题:
 多线程同时去操作一个资源是总会出现一些问题;
 例如:两个人同时取钱,如果都是去一个账号里面的钱,切里面有1000元;
  这是两个人同时看到的都是1000,并且两个人又同时输入1000,各取一千
  这样就会出现问题了;
 所以此时出现了同步;

4.用synchronized来标识的区域或方法即为监视器监视的部分----表示一个同步操作部分;
 同步操作就是在方法之中加入一个synchronized 关键字,表示此方法为同步方法;


 class Demo01 implements Runnable{
  private int ticket=10;
  //加入一个同步方法
  public synchronized void fun(){
   //把需要同步的地方放在同步方法中;
   if(ticket>0){
    try{
     Thread.sleep(100);
     }
    catch(Exception e){
     }
    System.out.println(Thread.currentThread().getName()+"---》卖票:"+ticket--);
   }
  }
  public void run(){
    while(ticket>0){
     this.fun();
    }
   }
 }
 
 public class Demo{
  public static void main(String args[]){
   Demo01 d=new Demo01();
   Thread t1=new Thread(d,"售票点A");
   Thread t2=new Thread(d,"售票点B");
   Thread t3=new Thread(d,"售票点C");
   
   t1.start();
   t2.start();
   t3.start(); 
   }
  }

5.提供了 synchronized 关键字 的第二种用法,同步代码块;
 synchronized(对象){
  同步代码
 }
 这个对象指的是调用该synchronized内容的 对象,当然就是当前进程了,说以用this;


 class Demo01 implements Runnable{
  private int ticket=10;
  
  public void run(){
    //同步代码块
    synchronized(this){
     while(ticket>0){
      try{
       Thread.sleep(100);
       }
      catch(Exception e){
       }
      System.out.println(Thread.currentThread().getName()+"---》卖票:"+ticket--); 
     }
    }  
   }
  }
 
 public class Demo{
  public static void main(String args[]){
   Demo01 d=new Demo01();
   Thread t1=new Thread(d,"售票点A");
   Thread t2=new Thread(d,"售票点B");
   Thread t3=new Thread(d,"售票点C");
   
   t1.start();
   t2.start();
   t3.start(); 
   }
  }