朋友问的题,试着写写。也许有其他实现方式,感觉题目应该是考察线程间协作wait和notify所以选择如下方式实现:
/**
* @author my_corner
* 2011-12-26
*/
public class ThreadPrint {
/**
* @author my_corner
* @param
* @return
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
PrintTask task = new PrintTask();
Thread a = new Thread(task);
a.setName("a");
Thread b = new Thread(task);
b.setName("b");
Thread c = new Thread(task);
c.setName("c");
a.start();
b.start();
c.start();
}
}
class PrintTask implements Runnable{
private int times = 0;
/**
*
*/
@Override
public void run() {
while(times<30){
synchronized (this) {
if(times%3==0){
if("a".equals(Thread.currentThread().getName())){
System.out.print("a");
times++;
this.notifyAll();
}else{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if(times%3==1){
if("b".equals(Thread.currentThread().getName())){
System.out.print("b");
times++;
this.notifyAll();
}else{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if(times%3==2){
if("c".equals(Thread.currentThread().getName())){
System.out.print("c");
times++;
this.notifyAll();
}else{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}
分享到:
相关推荐
初始值x=10,因此循环会执行三次,打印三个星号。因此,输出结果是B.***。 3. 内存回收:在Java中,对象引用的变化可能影响内存回收。选项B(u=v)会导致u指向v的对象,可能导致原来的u对象变成无引用状态,从而...
63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set...
这段代码看起来是一个循环嵌套,内部循环依赖于外部循环的条件,因此其时间复杂度是O(n^2),选A。 2. 第二题是一个组合问题,涉及到字符串中字符数量的约束。这个问题可以通过动态规划或计数方法解决,答案是B,429...
63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67...
63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set...
63、List、Map、Set三个接口,存取元素时,各有什么特点? 49 64、说出ArrayList,Vector, LinkedList的存储性能和特性 50 65、去掉一个Vector集合中重复的元素 50 66、Collection 和 Collections的区别。 51 67、Set...
因此,循环最多执行三次,输出结果是三个星号(***)。 3. **对象与内存管理**: - Java中的对象可以通过赋值操作引用彼此。在选项B(`u=v`)中,`u`不再指向原来的`U`实例,而是引用了`v`指向的对象。这可能导致...
初始时`x`为10,每次循环`x`减1,因此会执行3次循环,打印三个星号。 **正确答案**: B.*** #### 3. 内存回收情况 - **代码段**: ```java class U { int x, int y; U(int a, int b){x= a; y = b;} void copy...
- 死锁通常发生在多个线程互相等待对方持有的资源时。 - 出现死锁的四个必要条件:互斥条件、请求和保持条件、不剥夺条件、循环等待条件。 **Synchronized锁与Lock锁的区别** - `synchronized`是Java内置的关键字...
给出一个字符串 `s = "abc"`,打印出由 `s` 中的所有字符组成的全部可能的排列。 **示例**: 输入:`s = "abc"` 输出:`["abc", "acb", "bac", "bca", "cab", "cba"]` **解题思路**: 1. **回溯算法**:通过不断...
- worker模式:多进程和多线程混合模型,通过线程处理请求,适合处理动态内容和高并发连接的场景。 - 查看Apache支持的模块和当前工作模式 - 使用`httpd -l`命令查看模块,使用`httpd -M`命令查看当前工作模式。 ...
- **资源分配**:如果每个进程需要4个资源,有3个并发进程,至少需要10个资源才能避免死锁,因为每个进程可以拿到足够的资源一次完成,不形成循环等待。B选项正确。 8. **哈希冲突处理**: - **方法**:开放定址...
/ //匹配三个单字字符和一个任意的数字. /\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格. /[^"] * / //匹配零个或多个非引号字符. 正则表达式的复制字符 字符 含义 ________________...
`awk` 命令中,`BEGIN{FS=":"}` 设置字段分隔符为冒号,`{print $1}` 打印第一个字段,即行号。 **知识点2:查询以特定字符串结尾的行** - 使用 `grep` 命令。 - **命令示例**: `grep 'abc$' file1` - **解释**: ...
例如,当需要多次比较字符串“ABC”时,可以通过定义一个静态常量来替代硬编码的字符串值。这种方式不仅提高了代码的可维护性,还能避免潜在的拼写错误问题。 #### 五、谨慎选择框架 尽管市场上有许多成熟的Java...
- `continue`:结束本次循环,继续下一次循环。 - `return`:返回函数结果。 - `try`/`catch`/`finally`:异常处理语句。 #### 四、修饰符 - `public`:公共访问级别,允许任何类访问。 - `protected`:受保护访问...