多线程编程面试题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();
}
}
}
}
/*
* 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
- 多线程编程面试题3
- 多线程编程面试题
- 多线程编程4---面试题解法3
- 多线程编程面试题1
- 多线程编程面试题2
- 多线程之编程面试题
- 多线程编程4-------面试题增加信号
- 多线程编程10.1-----Condition解决面试题
- 多线程编程之三个面试题
- 多线程并发面试题3
- 15个顶级java多线程编程面试题
- 多线程编程4------面试题使用资源互斥类AtomicInteger
- 空中网面试题3--Java多线程
- 空中网多线程面试题3
- 多线程与并发面试题3
- java多线程面试题
- 多线程面试题
- 多线程面试题
- 包含min的栈~~剑指offer21题
- 自动装箱与拆箱
- 多线程编程面试题2
- iOS NSDateFormatter日期时间格式处理的用法
- linux多网卡的路由模式和桥接模式设置方法
- 多线程编程面试题3
- python实现求两个字符串的最长公共子串
- mybatis spring事务配置
- android 五种Toast显示方法
- C/C++中有关字长与平台无关的整数类型
- 全自动软化水设备:全自动软化水装置性能概述
- SimpleDateFormat的格式大全
- 金字塔
- 1