A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

格子衬衣

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

31黑马币
public class Demo {
/**
  * @param args
  */
public static void main(String[] args) {
  Resou r = new Resou("面包");
  Set1 s = new Set1(r);
  Get2 g = new Get2(r);
  Thread t1 = new Thread(s);
  Thread t2 = new Thread(g);
  t1.start();
  t2.start();
}
}
class Resou{
String name;
int num=0;
Resou(String name){
  this.name = name;
}
public void getN(){
  System.out.println("线程名为:"+Thread.currentThread().getName()+(num++)+"这是生产编号"+"生产的东西为:"+name);
}
public void setN(){
  System.out.println("线程名为:"+Thread.currentThread().getName()+(num++)+"这是消费的编号"+"消费的东西为:"+name);
}
}
class Set1 implements Runnable{
Resou r ;
Set1(Resou r){
  this.r = r;
}
public void run(){
  while(true){
  r.setN();
}
}
}
class Get2 implements Runnable{
Resou r ;
Get2(Resou r ){
  this.r = r;
}
public void run(){
  while(true){
   r.getN();
  }
}
}


到底是什么问题。我现在才开启了两个线程。。。求解。我先每个任务开启四个线程。并且用jdk5的锁机制。。。

最佳答案

查看完整内容

public class Demo { /** * @param args */ public static void main(String[] args) { Resou r = new Resou("面包"); Set1 s = new Set1(r); Get2 g = new Get2(r); Thread t1 = new Thread(s); Thread t2 = new Thread(s); Thread t3 = new Thread(g); Thread t4 = new Thread(g); t1.start(); t2.start(); t3.start(); t4.start(); } } class Resou { String name; int num = 0; boolean bool ...

4 个回复

倒序浏览
public class Demo {
        /**
         * @param args
         */
        public static void main(String[] args) {
                Resou r = new Resou("面包");
                Set1 s = new Set1(r);
                Get2 g = new Get2(r);
                Thread t1 = new Thread(s);
                Thread t2 = new Thread(s);
                Thread t3 = new Thread(g);
                Thread t4 = new Thread(g);
                t1.start();
                t2.start();
                t3.start();
                t4.start();
        }
}

class Resou {
        String name;
        int num = 0;
        boolean bool = true;
        Lock lock = new ReentrantLock();
        Condition c1 = lock.newCondition();
        Condition c2 = lock.newCondition();

        Resou(String name) {
                this.name = name;
        }

        public void getN() {
                try {
                        lock.lock();
                        while (bool != true)
                                try {
                                        c1.await();
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        System.out.println("线程名为:" + Thread.currentThread().getName()
                                        + (num) + "这是生产编号" + "生产的东西为:" + name);
                        bool = false;
                        c2.signal();
                } finally {
                        lock.unlock();
                }
        }

        public void setN() {
                try {
                        lock.lock();
                        try {
                                c2.await();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        System.out.println("线程名为:" + Thread.currentThread().getName()
                                        + (num++) + "这是消费的编号" + "消费的东西为:" + name);
                        bool = true;
                        c1.signal();
                } finally {
                        lock.unlock();
                }
        }
}

class Set1 implements Runnable {
        Resou r;

        Set1(Resou r) {
                this.r = r;
        }

        public void run() {
                while (true) {
                        r.setN();
                }
        }
}

class Get2 implements Runnable {
        Resou r;

        Get2(Resou r) {
                this.r = r;
        }

        public void run() {
                while (true) {
                        r.getN();
                }
        }
}


你的问题不是很清楚,你是不是想多个线程访问一个段代码? 用jdk5的lock锁机制,不知道是不是,上面是我在你原有的基础上改进的,开启了4个线程,每两个线程为一组访问,你想开启8个线程也是一样可以的,但是效率不高....
回复 使用道具 举报
能不能问下想问什么?
回复 使用道具 举报
好好啊好好哈好哈哈哦啊
回复 使用道具 举报
不知道你想问的到底是什么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马