三个线程同时输出12345 678910 1112131415....以此类推

package thread;

public class th {

public static int j = 0;

public static void main(String[] args) {

for (int i = 0; i < 5; i++) {

t tt = new t();

tt.start();

th.xun();

System.out.println("线程1");

d dd = new d();  dd.start();

}

}

public static synchronized void xun()

{

for (int i = 0; i < 5; i++) {

th.j++;

System.out.println(j);

}

}

}

class t extends Thread{  public void run() {

th.xun();

System.out.println("线程2");

super.run();

}

}

class d extends Thread{ public void run() {

th.xun();

System.out.println("线程3");

super.run();

}

}

时间: 2024-10-18 10:33:07

三个线程同时输出12345 678910 1112131415....以此类推的相关文章

三个线程顺序输出

一.join介绍 Thead.join()函数在使用后,会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行.源码中调用join后,方法会一直检测要join()的线程是否存活(isAlive()方法),直到线程执行完成后,调用线程的this.notifyAll()方法,才会回到刚刚挂起的主程序.基本操作如下: public class Worker extends Thread { // 工作者名 private String name; // 工作时间 private long tim

Java实现多线程经典问题:使用三个线程实现输出ABCABC循环

使用三个线程实现ABCABC--循环. 代码如下: //标记类,用来让三个线程共享,同时也是三个线程中同步代码快的标记对象. //之前这个标记我设置成Integer,但是发现Integer进行加法运算时会改变对 //象引用(原因是自动装箱),因此出现异常抛出.所以索性自己定义Flag类. class Flag{ int i=0; public synchronized void setI() { i++; if(i==3) i=0; } } //输出A的线程 class SafeTestA im

Java多线程:用三个线程控制循环输出10次ABC

题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次. 解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同步工作,也就是说要让三个线程轮流输出,直到10个ABC全部输出则结束线程.这里用一个Lock对象来控制三个线程的同步.用一个int型变量state标识由那个线程输出. 1 package com.thread; 2 3 import java.util.concurrent.locks.Lock;

启动三个线程A,B,C,按ABC的顺序输出10次

package jun; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /**  * 启动三个线程A,B,C,

Java多线程开启三个线程输出ABC10次

最近学多线程,搜了一下,满屏幕的问题都是类似标题那样的,所以就拿这个当开始吧,自己试了一下手, 多次把电脑CPU跑到100%,终于还是写出来了,大体思路为: 声明一个变量,标记三个线程该哪个线程输出,每次输出将该变量+1,判断方式为 变量对3的余数,如果为1-A,2-B, 3-C 1 public class ABC { 2 3 private static int mark = 0; 4 5 private static Object obj = new Object(); 6 7 publi

C#编程总结(三)线程同步

C#编程总结(三)线程同步 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行.对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应.对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力.否则,在完全满足前一个请求之前,将无法处理每个新请求.然而,线程的异步特性意味着必须协调对资源(如文件句柄.网络连接和内存)的访问.否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作. "如果觉得有用,请帮顶! 如果有

Java 多线程(三) 线程的生命周期及优先级

Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处于创建状态. 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源. 2.可运行状态: 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体——run()方法,这样就使得该线程处于可运行状态(Runnable). 这一

多线程爬虫Java调用wget下载文件,独立线程读取输出缓冲区

写了个抓取appstore的,要抓取大量的app,本来是用httpclient,但是效果不理想,于是直接调用wget下载,但是由于标准输出.错误输出的原因会导致卡住,另外wget也会莫名的卡住. 所以我采用: 一.独立线程读取输出信息: 二.自己实现doWaitFor方法来代替api提供的waitFor()方法,避免子进程卡死. 三.设置超时,杀死wget子进程,没有正确返回的话,重试一次,并把超时时间加倍: 有了以上操作,wget不会卡死,就算卡住了也会因为超时被干掉再重试一次,所以绝大部分的

java多线程学习(三)——线程栈

一.线程栈模型 线程栈模型是理解线程调度原理以及线程执行过程的基础.线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶,线程栈的内容是随着线程的运行状态变化而变化的,研究线程栈必须选择一个运行的时刻(指代码运行到什么地方) 上图中的栈A是主线程main的运行栈信息,当执行new JavaThreadDemo().threadMethod();方法时,threadMethod方法位于主线程栈中的栈顶,在threadMethod方法中运行的start()方法新建立了一个线程,此时,