一直对线程理解不清,今天总结一下线程知识。
单个生产者单个消费者问题()
核心是:生产者和消费者要拿到同一把锁,这里用的是this作为锁,即BankCard的实例本身
核心类:
public class BankCard {
private int money;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void consum(){
synchronized(this){
while(this.money<1){
try {
System.out.println("暂时没钱,坐等取钱。。。。。");
this.wait();
} catch (InterruptedException ex) {
}
}
this.money = this.money-1;
System.out.println("消耗了一份--------------");
}
}
public void produce(){
synchronized(this){
while(this.money<1){
System.out.println("一直在加钱‘’‘’‘’‘’");
this.money = this.money+1;
System.out.println("增加了一份+++++++++++++++");
}
// System.out.println("有钱了,通知取钱");
this.notifyAll();
}
}
}
然后再写两个线程即可,可以用继承Thread的方式,也可以用实现Runnable的方式,比较简单:
public class ThreadFather extends Thread{
BankCard card;
public ThreadFather(BankCard card) {
this.card = card;
}
@Override
public void run() {
while(true){
card.produce();//不断生产
}
}
}
public class ThreadSon extends Thread {
BankCard card;
public ThreadSon(BankCard card) {
this.card = card;
}
@Override
public void run() {
while(true){
card.consum();//不断消费
}
}
}
最后,写一个测试类:
public class test {
public static void main(String[] args){
BankCard bc = new BankCard();
ThreadSon ts = new ThreadSon(bc);
ThreadFather tf = new ThreadFather(bc);
ts.start();
tf.start();
}
}
结果是:
这个例子比较简单,不过容易理解(可以把produce()方法中的注释去掉,就很容易发现问题,问题可自行解决),
接下来就可以解决一些比较复杂的线程同步问题了。
多消费者多生产者同步问题。。。