7.29日foghorn 电面面经



  • 问了:

    1.怎么建立一个接口:叫work

    interface work() {

    void doWork();

    }

    1. 建立一个 hardwork 然后实现 work,里面remove掉现在有的这个list里所有值为10 的数。

    class HardWork implements work {
    private ArrayList list = new ArrrayList<>();
    public void doWork() {
    for (int i = 0;i < list.size(); i++) {

    //  @Sychronized
    
      synchrionized(this) {       @@@   这个地方他问了,如果有两个线程同时访问如何保证不出问题,我就把这块synchronized 上了。 另外在遍历数组本身的时候remove 会出现 concurrentModificationException 这地方他也问了。 
    
    
    
        if(list.get(i) == 10) {
    
            list.remove(i);
    
        }
    
      }
    
    }
    

    }

    }

    如何写一个线程,两种方法,implements Runnable 或者 extends Thread. 用了前一种写了这个线程

    class onePartThreadWork implements Runnable {

    // 假定 有个静态全局list(arrOfTh) 存着2个thread 这时候会不会有memory leak , 答: 是会有的,因为线程结束之后仍然有在list(arrOfTh)中的reference 指向线程,所以不会被回收。正常情况是被回收的原因是java 里面有gc() 
    
    static ArrayList<Thread> arrOfTh = new ArrayList<>();
    
    
    
    public void run {
    
      doWork();
    
    }
    
    
    
    public static void foo() {
    
      Thread t1= (new Thread(new onePartThreadWork()));  
    
      Thread t2 = (new Thread(new onePartThreadWork()));  
    
    
    
      arrOfTh.add(t1);
    
      arrOfTh.add(t2);
    
    }
    

    }


登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待