「线程交替输出java」两个线程交替运行
本篇文章给大家谈谈线程交替输出java,以及两个线程交替运行对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、题1:java 设计一个类,要求两个线程分别交替输出正负整数。下面还有一题
- 2、谁帮我实现以下Java中的线程交替执行控制,要求按顺序输出1到100,代码如下。
- 3、JAVA中两个线程为什么会交替执行?
- 4、编程JAVA 实现使用多线程数字从10到1两个线程的交替输出
- 5、java多线程问题。两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。
题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和两个线程交替运行的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。