| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1501 人关注过本帖, 1 人收藏
标题:Google 的一道面试题,老师讲了半天,没做出来,求解
只看楼主 加入收藏
我是刺鸟
Rank: 2
等 级:论坛游民
帖 子:12
专家分:17
注 册:2014-5-4
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:5 
Google 的一道面试题,老师讲了半天,没做出来,求解
有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:

      A:1 2 3 4 1 2....

      B:2 3 4 1 2 3....

      C:3 4 1 2 3 4....

      D:4 1 2 3 4 1...
搜索更多相关主题的帖子: Google 
2014-08-11 10:11
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:10 
程序代码:
package test.copy;

/**

 * 有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。

 * 现要让四个文件呈如下格式:

 * 

 * A:1 2 3 4 1 2....

 * 

 * B:2 3 4 1 2 3....

 * 

 * C:3 4 1 2 3 4....

 * 

 * D:4 1 2 3 4 1...

 * 

 * @author testadmin

 * 

 */
public class test implements Runnable {
    private int num;

    public test(){}
    public test(int num) {
        this.num = num;
    }

    public synchronized void  run() {
        // TODO Auto-generated method stub
        System.out.println(num);
        
    }
}

程序代码:
package test.copy;

public class testmain {
    public void getA(test tt,test tt2,test tt3, test tt4) throws InterruptedException {
        System.out.println("A:");
        new Thread(tt).start();
        new Thread(tt).sleep(10);
        new Thread(tt2).start();
        new Thread(tt2).sleep(10);
        new Thread(tt3).start();
        new Thread(tt2).sleep(10);
        new Thread(tt4).start();
        new Thread(tt4).sleep(10);

    }
    
    public void getB(test tt2,test tt3,test tt4, test tt) throws InterruptedException{
        System.out.println("B:");
        new Thread(tt2).start();
        new Thread(tt2).sleep(10);
        new Thread(tt3).start();
        new Thread(tt3).sleep(10);
        new Thread(tt4).start();
        new Thread(tt4).sleep(10);
        new Thread(tt).start();
        new Thread(tt).sleep(10);
    }
    
    public void getC(test tt3, test tt4,test tt,test tt2) throws InterruptedException{
        System.out.println("B:");
        new Thread(tt2).start();
        new Thread(tt2).sleep(10);
        new Thread(tt3).start();
        new Thread(tt3).sleep(10);
        new Thread(tt4).start();
        new Thread(tt4).sleep(10);
        new Thread(tt).start();
        new Thread(tt).sleep(10);
    }
    
    public void getD(test tt4,test tt,test tt2,test tt3) throws InterruptedException{
        System.out.println("B:");
        new Thread(tt2).start();
        new Thread(tt2).sleep(10);
        new Thread(tt3).start();
        new Thread(tt3).sleep(10);
        new Thread(tt4).start();
        new Thread(tt4).sleep(10);
        new Thread(tt).start();
        new Thread(tt).sleep(10);
    }
    public static void main(String[] args) throws InterruptedException {
        test tt = new test(1);
        test tt2 = new test(2);
        test tt3 = new test(3);
        test tt4 = new test(4);
        new Thread(tt).setPriority(10);
        new Thread(tt2).setPriority(8);
        new Thread(tt3).setPriority(5);
        new Thread(tt4).setPriority(1);
        testmain ttm = new testmain();
        ttm.getA(tt,tt2,tt3,tt4);
        System.out.println("******************");
        ttm.getB(tt2,tt3,tt4,tt);
        System.out.println("******************");
        ttm.getC(tt3,tt4,tt,tt2);
        System.out.println("******************");
        ttm.getD(tt4,tt,tt2,tt3);
        
    }
}

学海无涯#¥%……&*(
2014-08-13 15:36
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:0 
只是样子而已

学海无涯#¥%……&*(
2014-08-13 15:36
梦里仙
Rank: 2
等 级:论坛游民
威 望:2
帖 子:28
专家分:30
注 册:2012-2-24
收藏
得分:10 
对于四个文件ABCD,对线程的调用顺序也不一样
A:one.start();two.start();three.start();four.start();
B:two.start();three.start();four.start();one.start();
C:three.start();four.start();one.start();two.start();
D:four.start();one.start();two.start();three.start();
线程1的功能就是输出1,线程2的功能就是输出2,线程3的功能就是输出3,线程2的功能就是输出4
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.Lock;
public class thread {
    private static int state=0;
    public static void main(String[]args)
    {
        final Lock l=new ReentrantLock();
        Thread one=new Thread(new Runnable(){
            public void run()
            {
                while(state<=20)
                {
                    l.lock();
                    if(state%4==0)
                    {
                        System.out.print(1);
                        state++;
                    }
                    l.unlock();
                }
               
            }            
        });
        Thread two=new Thread(new Runnable(){
            public void run()
            {
                while(state<=20)
                {
                    l.lock();
                    if(state%4==1)
                    {
                        System.out.print(2);
                        state++;
                    }
                    l.unlock();
                }
               
            }
            
        });
        Thread three=new Thread(new Runnable(){
            public void run()
            {
                while(state<=20)
                {
                    l.lock();
                    if(state%4==2)
                    {
                        System.out.print(3);
                        state++;
                    }
                    l.unlock();
                }
               
            }
            
        });
        Thread four=new Thread(new Runnable(){
            public void run()
            {
                while(state<=20)
                {
                    l.lock();
                    if(state%4==3)
                    {
                        System.out.print(4);
                        state++;
                    }
                    l.unlock();
                }
               
            }
            
        });         
        one.start();  
        two.start();
        three.start();
        four.start();
      }
}

运行结果:12341234123412341234




2014-08-13 15:36
我是刺鸟
Rank: 2
等 级:论坛游民
帖 子:12
专家分:17
注 册:2014-5-4
收藏
得分:0 
回复 2 楼 java 小蚂蚁
谢了。
2014-08-26 14:39
我是刺鸟
Rank: 2
等 级:论坛游民
帖 子:12
专家分:17
注 册:2014-5-4
收藏
得分:0 
回复 4 楼 梦里仙
好复杂的说
2014-08-26 14:39
快速回复:Google 的一道面试题,老师讲了半天,没做出来,求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019432 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved