「线程交替输出java」两个线程交替运行

博主:adminadmin 2023-01-13 14:15:09 395

本篇文章给大家谈谈线程交替输出java,以及两个线程交替运行对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

题1:java 设计一个类,要求两个线程分别交替输出正负整数。下面还有一题

1、

public class PrintNumber implements Runnable

{

private int sign = 1;//1输出正数,-1输出负数

private static int seg = 1; //同步信号, 全局常量,所有线程共享

public PrintNumber(int sign) {

this.sign = sign;

}

public void run() {

for (int i=1; i10; i++)

{

try

{

printNumber(i);

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

//同步方法

private synchronized void printNumber(int i) throws InterruptedException{

while (seg != sign)

{

wait(10);

}

System.out.println(sign * i);

seg = -1 * seg;

}

public static void main(String[] args) {

PrintNumber p1 = new PrintNumber(1);

PrintNumber p2 = new PrintNumber(-1);

new Thread(p1).start();

new Thread(p2).start();

}

}

2、

public class Reduction implements Runnable

{

private String name; //线程名字

private int count = 100;

public Reduction(String name) {

this.name = name;

}

public void run() {

while (count 0)

{

int rand = (int)(Math.random() * 10);

count = count - rand;

}

System.out.println(name + " at " + new java.util.Date() + " finished!");

}

public static void main(String[] args)

{

Reduction p1 = new Reduction("P1");

Reduction p2 = new Reduction("P2");

new Thread(p1).start();

new Thread(p2).start();

}

}

谁帮我实现以下Java中的线程交替执行控制,要求按顺序输出1到100,代码如下。

稍微修改下   未测试

package com.leejiliang.HomeworkDemo2;

/**

 * 定义打印输出类,定义两个数据输出方法,分别用于输出偶数和奇数

 * 

 * @author Administrator even偶数 uneven奇数

 */

class PrintNumber {

    boolean isEven = true;

    public void printEven() {

        for (int i = 0; i = 100; i = i + 2) {

            if (i % 2 == 0) {

                synchronized (this) {

                    while (!isEven) {

                        try {

                            this.wait();

                        } catch (InterruptedException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                        }

                    }

                    System.out.println("偶数:" + i);

                    isEven = false;

                    this.notify();

                }

            }

        }

    }

    // 输出1到100之间的奇数

    public void printUnEven() {

        for (int i = 1; i = 99; i = i + 1) {

            if (i % 2 != 0) {

                synchronized (this) {

                    while (isEven) {

                        try {

                            this.wait();

                        } catch (InterruptedException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                        }

                    }

                    System.out.println("奇数:" + i);

                    isEven = true;

                    this.notify();

                }

            }

        }

    }

}

/**

 * 

 * @author Administrator 定义输出偶数的线程类

 */

class ThreadForEven implements Runnable {

    private PrintNumber pn = null;

    public ThreadForEven(PrintNumber pn) {

        this.pn = pn;

    }

    @Override

    public void run() {

        pn.printEven();

    }

}

/**

 * 定义输出奇数的线程类

 * 

 * @author Administrator

 *

 */

class ThreadForUneven implements Runnable {

    private PrintNumber pn = null;

    public ThreadForUneven(PrintNumber pn) {

        this.pn = pn;

    }

    @Override

    public void run() {

        pn.printUnEven();

    }

}

// 主函数,执行两个线程

class ZeroToOneHundred {

    public static void main(String[] args) {

        PrintNumber pn = new PrintNumber();

        ThreadForEven te = new ThreadForEven(pn);

        ThreadForUneven tu = new ThreadForUneven(pn);

        Thread threadeven = new Thread(te);

        Thread threaduneven = new Thread(tu);

        threadeven.start();

        threaduneven.start();

    }

}

JAVA中两个线程为什么会交替执行?

java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。

一个线程会因为以下原因而放弃CPU。

1

java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其它线程获得运行机会。

2

当前线程因为某些原因而进入阻塞状态

3

线程结束运行

需要注意的是,线程的调度不是跨平台的,它

不仅仅取决于java虚拟机,还依赖于操作系统。在某些操作系统中,只要运行中的线程没有遇到阻塞,就不会放弃CPU;在某些操作系统中,即使线程没有遇到阻塞,也会运行一段时间后放弃CPU,给其它线程运行的机会。

java的线程调度是不分时的,同时启动多个线程后,不能保证各个线程轮流获得均等的CPU时间片。

随机两个字是关键

,导致同样优先级的thread在访问相同对象的时候存在风险,所以java后来才引入了synchonized

关键字

编程JAVA 实现使用多线程数字从10到1两个线程的交替输出

class out implements Runnable

{

private int ticket = 100;

public synchronized void run()

{

while (true)

{

if (ticketo)

{

System.out.println(Thread.currentThread().getName()+"="+"sale..."+ticket--);//若改成this.getName();不行因为接口里没有getName();

}

}

}

}

class RunnableDemo

{

public static void main(String[] args)

{

Ticket P = new Ticket();//先创造接口对象

Thread P1 = new Thread(P);//再把接口对象给Thread

Thread P2 = new Thread(P);

P1.start();

P2.start();

}

这是最基本的。。多线程里面玩的就是同步代码块。。都是手打的。。分给我吧,运行的时候运行RunnableDemo;

java多线程问题。两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。

你这样写两个线程实例t1和t2间没有交互通信,各跑各的,当然不会达到你上面说的那个结果。要想达到你上面说的那个效果,必须进行线程间通信。比如,你可以让两个线程实例都对方的引用,在run函数里执行打印的方法后,就让t2跑,t1去睡觉(sleep())。等t2打印完后,又让t1跑,让t2去睡觉,这样即可。 给你思路,代码我就不写了。

关于线程交替输出java和两个线程交替运行的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。