多线程

来源:互联网 发布:matlab矩阵qr分解 编辑:程序博客网 时间:2024/06/06 04:48

多线程

1、线程同步:synchronized
2、同步方法:
           public synchronized void sale(){
  线程处理的操作
  }

3、同步代码块:
          synchronized(object){
  线程处理的操作

   }

4、同步方法和同步代码块一起同步:设定条件,通过条件来满足要调用的代码

例:

public class ThreadThird {
 public static void main(String[] args) {
  Q a = new Q();
  new Thread(new Changed(a)).start();
  new Thread(new Readed(a)).start();
 }
}

class Q {
 String name = "unknow";
 String sex = "unknow";
 boolean bfull=false;
 public synchronized void put(String name, String sex) {
  if(bfull){
   try {
    wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
  this.name = name;
  this.sex = sex;
  bfull=true;
  notify();
 }

 public synchronized void get() {
  if(!bfull){
   try {
    wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }}
  System.out.println(name + ":" + sex);
  bfull=false;
  notify();
 }
}

class Changed implements Runnable {
 Q q = null;

 public Changed(Q q) {
  this.q = q;
 }

 public void run() {
  int i = 0;
  while (true) {
   if (i == 0) {
    q.put("张三", "男");
   } else {
    q.put("张丽", "女");
   }
   i = (i + 1) % 2;
  }
 }
}

class Readed implements Runnable {
 Q q = null;

 public Readed(Q q) {
  this.q = q;
 }

 public void run() {
  while (true) {
   q.get();
  }
 }
}