多线程循环交替输出1到100-【implements Runnable】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/J080624/article/details/52698484

【1】Thread的常用方法

  • 1.start():启动线程并执行相应的run()方法
  • 2.run():子线程要执行的代码放入run()方法中
  • 3.currentThread():静态的,调取当前的线程
  • 4.getName():获取此线程的名字
  • 5.setName():设置此线程的名字
  • 6.yield():调用此方法的线程释放当前CPU的执行权
  • 7.join():在A线程中调用B线程的join()方法,表示:当执行到此方法,A线程停止执行,直至B线程执行完毕,A线程再接着join()之后的代码执行
  • 8.isAlive():判断当前线程是否还存活
  • 9.sleep(long l):显式的让当前线程睡眠l毫秒
  • 10.线程通信:wait() notify() notifyAll()
  • 设置线程的优先级
    • getPriority() :返回线程优先值
    • setPriority(int newPriority) :改变线程的优先级

【2】代码实例

示例代码如下:

package com.web.test;

public class TestThread implements Runnable {
    int i = 1;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true){
        /*指代的为 t,因为使用的是implements方式。若使用继承Thread类的方式,慎用this*/
            synchronized (this) {
            /*唤醒另外一个线程,注意是this的方法,而不是Thread*/
            notify();
            try {
            /*使其休眠100毫秒,放大线程差异*/
            //Thread,currentThread().sleep(0,100);使其休眠100纳秒
                Thread.currentThread().sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                if (i<=100) {

                    System.out.println(Thread.currentThread().getName() + ":"+ i);
                    i++;
                    try {
                    /*放弃资源,等待*/
                        wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
        }
    }
    }

    public static void main(String[] args) {
        /*只有一个TestThread对象*/
        TestThread t = new TestThread();
        Thread t1 = new Thread(t);
        Thread t2 = new Thread(t);

        t1.setName("线程1");
        t2.setName("线程2");

        t1.start();
        t2.start();

    }
}

输出结果如下:

这里写图片描述

java多线程交替输出

10-20

[color=#FF0000]新人初学线程,想实现线程1输出1 2 3 4 5,然后线程2输出6, 7 8 9 10,再是线程1输出11 12 13 14 15,这样一直输出到50.rnrn代码如下:[/color]rnrnpackage 多线程;rnrnpublic class 线程同步2 rnrn /**rn * @param argsrn */rn public static void main(String[] args) rn // TODO Auto-generated method stubrnrn TongBu1 t = new TongBu1();rn Thread p1 = new Thread(t);rn p1.setName("线程1");rn p1.start();rn rn Thread p2 = new Thread(t);rn p2.setName("线程2");rn p2.start();rn rnrnrnrnrnclass TongBu1 implements Runnablern rn static int count =1;rn public synchronized void run() rn for (int i = count; i <= 50; i++) rn try rn System.out.println(Thread.currentThread().getName()+"输入:"+i);rn if (i-count==4) rn count=i+1;rn notify();rn wait();rn rn rn catch (Exception e) rn // TODO: handle exceptionrn rn rn rnrnrn[color=#3366FF]==========================================================================[/color]rn结果输出为:rn线程1输入:1rn线程1输入:2rn线程1输入:3rn线程1输入:4rn线程1输入:5rn线程2输入:6rn线程2输入:7rn线程2输入:8rn线程2输入:9rn线程2输入:10rn线程1输入:6rn线程1输入:7rn线程1输入:8rn线程1输入:9rn线程1输入:10rn线程1输入:11rn线程1输入:12rn线程1输入:13rn线程1输入:14rn线程1输入:15rn线程2输入:11rn线程2输入:12rn线程2输入:13rn线程2输入:14rn线程2输入:15rn线程2输入:16rn线程2输入:17rn线程2输入:18rn线程2输入:19rn线程2输入:20rn线程1输入:16rn线程1输入:17rn线程1输入:18rn线程1输入:19rn线程1输入:20rn线程1输入:21rn线程1输入:22rn线程1输入:23rn线程1输入:24rn线程1输入:25rn线程2输入:21rn线程2输入:22rn线程2输入:23rn线程2输入:24rn线程2输入:25rn线程2输入:26rn线程2输入:27rn线程2输入:28rn线程2输入:29rn线程2输入:30rn线程1输入:26rn线程1输入:27rn线程1输入:28rn线程1输入:29rn线程1输入:30rn线程1输入:31rn线程1输入:32rn线程1输入:33rn线程1输入:34rn线程1输入:35rn线程2输入:31rn线程2输入:32rn线程2输入:33rn线程2输入:34rn线程2输入:35rn线程2输入:36rn线程2输入:37rn线程2输入:38rn线程2输入:39rn线程2输入:40rn线程1输入:36rn线程1输入:37rn线程1输入:38rn线程1输入:39rn线程1输入:40rn线程1输入:41rn线程1输入:42rn线程1输入:43rn线程1输入:44rn线程1输入:45rn线程2输入:41rn线程2输入:42rn线程2输入:43rn线程2输入:44rn线程2输入:45rn线程2输入:46rn线程2输入:47rn线程2输入:48rn线程2输入:49rn线程2输入:50rn线程1输入:46rn线程1输入:47rn线程1输入:48rn线程1输入:49rn线程1输入:50rn[color=#3366FF]================================================================================[/color]rnrn[color=#FF0000]调试过程中,发现[/color]rn[img=http://img.bbs.csdn.net/upload/201710/20/1508488716_629877.png][/img]rnrn[color=#FF0000]count明明是11,为什么i被赋值为6?[/color]

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试