多线程 实现控制台打印“我爱你”10遍

package Thread;
/**
 *
 * @author Administrator
 *创建ABC三条线程 保证A线程 打印 我 B线程 打印 爱  C线程 打印 你  循环10次
 */
public class DoSomeTest {
    public static void main(String[] args) throws InterruptedException {
        Object a = new Object();
        Object b = new Object();
        Object c = new Object();

        Thread t1 =new Thread(new DoSome("我",c,a));
        Thread t2 =new Thread(new DoSome("爱",a,b));
        Thread t3 =new Thread(new DoSome("你",b,c));
        t1.start();
        Thread.sleep(1000);
        t2.start();
        Thread.sleep(1000);
        t3.start();
    }
}
package Thread;
/**
 * 控制线程打字
 *
 */
public class DoSome implements Runnable {
     //三个变量 三条线程之间切换执行 一把锁是不够的 需要两把锁 对象有锁的定义 Object对象
    private String word;//线程要打印的字
    private Object prev;//当前线程的上一个线程要持有的锁
    private Object current;//当前线程所要持有的锁

    @Override
    public void run() {
     for(int i = 0;i<10;i++){
         synchronized(prev){
             synchronized(current){
                 System.out.println(word);
                 current.notify();
             }
             try {
                prev.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
         }
     }
    }
    //打印字的操作
  public DoSome(String word,Object prev,Object current){
      this.word = word;
      this.prev = prev;
      this.current=current;
  }
}

原文地址:https://www.cnblogs.com/ls1783047205/p/9751048.html

时间: 2024-11-15 22:23:53

多线程 实现控制台打印“我爱你”10遍的相关文章

1418作业(8)多线程 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID 在屏幕上打印10遍

/****************************************************************************** *题目: 编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自己的ID * 在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC-依次递推. ******************************************************************************

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...直到45结束

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...知道45结束 public class Exam3{ public static void main(String[]args){ MyThread t1=new MyThread("线程一"); MyThread t2=new MyThread("线程二"); MyThread t3=new MyThread("线程三"); t1.

在控制台输入字母然后在控制台打印相应的二位数组字母,要求一行打印

1 package MyHomeWork; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Scanner; 6 7 /** 8 * Created by zhouyubin on 7/11/14. 9 */ 10 public class Test2 { 11 private static final char[][] print_a={{' ',' ',' ','A',' ',' ',' ','

Java文件目录树状结构:控制台打印某个文件夹下的文件目录树状结构

1 package com.zhen.file; 2 3 import java.io.File; 4 5 /* 6 * 控制台打印某个文件夹下的文件目录树状结构 7 * 递归算法 8 */ 9 10 public class FileTree { 11 12 public static void main(String[] args) { 13 File file =new File("D:/Github/JavaTest"); 14 PrintFile(file, 0); 15 }

Spring Boot使用AOP在控制台打印请求、响应信息

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果.其与设计模式完成的任务差不多,是提供另一种角度来思考程序的结构,来弥补面向对象编程的不足. 通俗点讲就是提供一个为一个业务实现提供切面注入的机制,通过这种方式,在业务运行中将

maven项目整合SSM配置log4j, 实现控制台打印SQL语句

在原有项目正常启动的情况下, 实现在控制台打印mapper包下SQL语句. 1.在pom.xml配置文件中添加两个依赖(缺一不可) 1 <!--日志包--> 2 <dependency> 3 <groupId>log4j</groupId> 4 <artifactId>log4j</artifactId> 5 <version>${log4j-version}</version> 6 </dependen

经典多线程问题-轮流打印字母和数字

1.0 synchronized package com.example.demo.study.questions; /** * @ClassName Question13 * @Description: 经典多线程问题-轮流打印字母和数字 * @Author xtanb * @Date 2019/10/22 * @Version V1.0 **/ public class Question13 { private volatile boolean flag = true; private in

构建完全二叉树、控制台打印二叉树

两段比较实用的代码,一个用于根据输入的数组构建一棵完全二叉树,一个用于在控制台打印二叉树,方便查看树的结构(打印二叉树的代码是在网上找的,现在找不到出处了,向作者抱歉). //首先是节点的结构 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; ///构建完全二叉树,用到了队列 TreeN

Js也有console对象,在控制台打印调试再好不过

console.warn( "nothing selected, can't validate, returning nothing" ); 单独运行,居然在控制台打印出了nothing selected, can't validate, returning nothing, 豁然开朗,既然可以这样在控制台打印出消息,那以后就省得麻烦去用什么alert或是按F10去逐行调试了,肯定可以节省不少时间. 特意使用for(var i in console)查看了下各种浏览器控制台对conso