以下java代码输出线程,每一个java线程可以看成由代码

谁帮我实现以下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线程问题:为什么以下代码调用同样的线程输出的结果不一样呢?一个是输出1-10,一个输出的全是1

首先说用M定义的线程,这里M相当于继承线程方法的类,在这个类里给它定义了线程方法。当在public方法里创建M的实例时,类M中的方法也被实例化了,所以当用t.start();启动线程时,是启动的M中的线程。再说for中的,和上边完全相反,这个线程只是开启了线程,并没有定义其它方法,当程序运行时能和上边程序同时运行,所以都是1,这是for循环的结果

java多线程编程代码如下,输出结果如下:

首先,你同步的是具体的某个Test实例, 对于那个实例来说,实际上只有一个线程访问了那个代码块,但是sum和other却是多个线程同时去进行访问,实际上这是不安全的,如果你想实现每次都输出10000的效果,那么正确的应该是在Test.class上加锁,而不是获取Test实例的锁,修改后的代码如下:

public class Test extends Thread {

public static int sum = 10000;

public static int other = 0;

public void getMoney() {

synchronized (Test.class) {

System.out.println(Thread.currentThread().getName() + " 开始执行");

sum = sum - 100;

System.out.println("sum-100");

other = other + 100;

System.out.println("other+100");

System.out.println(sum + other);

System.out.println(Thread.currentThread().getName() + " 执行完成");

}

}

public void run() {

getMoney();

}

public static void main(String[] agrs) {

Thread t[] = new Thread[10];

for (int i = 0; i = 9; i++) {

t[i] = new Test();

t[i].start();

}

}

}

// 上面代码能得到你的结果


文章名称:以下java代码输出线程,每一个java线程可以看成由代码
URL标题:http://bzwzjz.com/article/dseiihj.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 定制网站建设 自适应网站建设 网站制作公司 成都网站设计 成都网站建设 成都网站建设 定制网站制作 广安网站设计 泸州网站建设 四川成都网站设计 网站建设方案 成都企业网站建设 阿坝网站设计 高端品牌网站建设 营销型网站建设 成都网站制作 手机网站建设 成都h5网站建设 成都网站设计 响应式网站建设 成都商城网站制作 攀枝花网站设计