有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。
2017-03-15 22:23
661 查看
今天去面试的时候,遇到的笔试题,当时没有想到,回来学习记录下。今天去面试的时候,遇到的笔试题,当时没有想到,回来学习记录下。
public class TestPrintOrder {
public static void main(String[] args) {
AtomicInteger atomic = new AtomicInteger();
Print tPrint = new Print();
Thread threadA = new ThreadTest("A", 0, tPrint, 10, atomic);
Thread threadB = new ThreadTest("B", 1, tPrint, 10, atomic);
Thread threadC = new ThreadTest("C", 2, tPrint, 10, atomic);
threadA.start();
threadB.start();
threadC.start();
}
}
class ThreadTest extends Thread{
private String name = "";
private Integer id = 0;
private Print tPrint = null;
private int count = 0;
AtomicInteger atomic = null;
public ThreadTest(String name, Integer id, Print tPrint, int count,
AtomicInteger atomic) {
super();
this.name = name;
this.id = id;
this.tPrint = tPrint;
this.count = count;
this.atomic = atomic;
}
public void run(){
while(count > 0){
if(atomic.get() % 3 == id){
tPrint.printName(name);
count --;
atomic.getAndIncrement();
}
}
}
}
/**
* 打印
*/
class Print{
void printName(String name){
System.out.print(name);
}
}
1.设计上注意,把打印这个对象独立出来,以便控制资源的同步
2.使用atomic类原子性控制线程的执行,此处的取模,相当于一个变量标识
3.如果是打印一遍,使用线程的join(),比较便捷。
参考文章 :http://blog.csdn.net/seapeak007/article/details/53437339
public class TestPrintOrder {
public static void main(String[] args) {
AtomicInteger atomic = new AtomicInteger();
Print tPrint = new Print();
Thread threadA = new ThreadTest("A", 0, tPrint, 10, atomic);
Thread threadB = new ThreadTest("B", 1, tPrint, 10, atomic);
Thread threadC = new ThreadTest("C", 2, tPrint, 10, atomic);
threadA.start();
threadB.start();
threadC.start();
}
}
class ThreadTest extends Thread{
private String name = "";
private Integer id = 0;
private Print tPrint = null;
private int count = 0;
AtomicInteger atomic = null;
public ThreadTest(String name, Integer id, Print tPrint, int count,
AtomicInteger atomic) {
super();
this.name = name;
this.id = id;
this.tPrint = tPrint;
this.count = count;
this.atomic = atomic;
}
public void run(){
while(count > 0){
if(atomic.get() % 3 == id){
tPrint.printName(name);
count --;
atomic.getAndIncrement();
}
}
}
}
/**
* 打印
*/
class Print{
void printName(String name){
System.out.print(name);
}
}
1.设计上注意,把打印这个对象独立出来,以便控制资源的同步
2.使用atomic类原子性控制线程的执行,此处的取模,相当于一个变量标识
3.如果是打印一遍,使用线程的join(),比较便捷。
public class TestPrintOrder1 { public static void main(String[] args) throws InterruptedException { Thread testA = new TestThread("A"); Thread testB = new TestThread("B"); Thread testC = new TestThread("C"); testA.start(); testA.join(); testB.start(); testB.join(); testC.start(); } } class TestThread extends Thread{ String name = ""; public TestThread(String name){ this.name = name; } public void run(){ System.out.print(name); } }
参考文章 :http://blog.csdn.net/seapeak007/article/details/53437339
相关文章推荐
- 有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。不准使用线程的sleep()
- 3个线程每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推:
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 笔试题:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 润和面试题:开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推