多线程编程面试题3

来源:互联网 发布:知乎重庆普瑞眼科医院 编辑:程序博客网 时间:2024/04/30 23:21
package zhu.suo;
/*
 * 3.输入 1,2
       2,3
       2,5
       3,4
输出 
     1,2--时间1
     2,3--时间1
     3,4--时间1
     2,5--时间2
四个线程同时执行


//注意点:
 * 在System.currentMilions/1000获取时间中 出现
 * ...998 /1000-->...0
 * ...999  /1000-->...0
 * ..1000  /1000-->...1
 * 这导致时间不再同一秒
 * */
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;


public class Test3 {


public static void main(String[] args) {
for(int i=1;i<4;i++)
{
final String I = String.valueOf(i);
new Thread(
new Runnable() {
@Override
public void run() {
dosome(I,"2");
}
}
).start();
}
new Thread(
new Runnable() {
@Override
public void run() {
dosome("1","2");
}
}
).start();
}
static CopyOnWriteArrayList<String> list=new CopyOnWriteArrayList<String>();//使用同步集合防止多线程 对集合遍历时,增删元素
static void dosome(String k,String v)
{
if(!list.contains(k))
{
list.add(k);
}else
{
//包含的话 需要互斥 找到原始k
//遍历
for(String o: list)
{
if(o.equals(k))
{
k=o;
}
}
}
synchronized (k) {
try {
Thread.sleep(1000);
System.out.println("k:"+k+",v:"+v+",Time"+System.currentTimeMillis()/1000);//时间除以1000是除掉毫秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}
0 0
原创粉丝点击