澳门新葡亰娱乐网站-www.142net-欢迎您

澳门新葡亰娱乐网站是因为你还没有找到一条正确的致富之路,www.142net是将所有的游戏都汇集在一起的官方平台,因为澳门新葡亰娱乐网站这个网站当中有着大量的游戏攻略,托IP定位技术,传达终端直接到达的精准传播方式。

线程交替运行,位运算实现加【澳门葡萄京官方

来源:http://www.bhtsgq.com 作者:计算机知识 人气:63 发布时间:2019-05-30
摘要:使用synchronized     package com.pb.thread.demo5;/**使用synchronized * 一个线程加一运算,一个线程做减法运算,多个线程同时交替运行 * * @author Denny * */public class Count { private int num = 0; private boo

使用synchronized

 

 

package com.pb.thread.demo5;

/**使用synchronized
 * 一个线程加一运算,一个线程做减法运算,多个线程同时交替运行
 * 
 * @author Denny
 *
 */
public class Count {
    private int num = 0;
    private boolean flag = false; // 标识
    //加法
    public synchronized void add() {
        while (flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.num  ; //加
        System.out.println(Thread.currentThread().getName()   "........"   this.num);
        this.flag=true; //设置标识为true
        notifyAll(); //唤醒所有在线程池中冻结的线程,会把所有都唤醒

    }
    //减法
    public synchronized void sub() {
        while (!flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.num--; //减
        System.out.println(Thread.currentThread().getName()   "........"   this.num);
        this.flag=false; //设置标识为true
        notifyAll(); //唤醒所有在线程池中冻结的线程,会把所有都唤醒
    }
}

 

线程交替运行,位运算实现加【澳门葡萄京官方网站】。 

 

 

package com.pb.thread.demo5;

public class Add implements Runnable {
    private Count count;
    public Add(Count count){
        this.count=count;
    } 

    @Override
    public void run() {
        while(true){
            count.add();
        }

    }

}
//================
package com.pb.thread.demo5;


public class Sub implements Runnable {
    private Count count;
    public Sub(Count count){
        this.count=count;
    } 

    @Override
    public void run() {
        while(true){
            count.sub();
        }

    }

}

 

测试类

 

package com.pb.thread.demo5;

public class CountTest {

    public static void main(String[] args) {
        Count c=new Count();
        Add add=new Add(c);
        Sub sub=new Sub(c);
        Thread t1=new Thread(add);
        Thread t2=new Thread(add);
        Thread t3=new Thread(sub);
        Thread t4=new Thread(sub);
        t1.start();
        t2.start();
        t3.start();
        t4.start();

    }

}

 

结果:

 

Thread-2........0
Thread-1........1
Thread-3........0
Thread-0........1
Thread-2........0
Thread-1........1
Thread-3........0
Thread-0........1
Thread-2........0

 

package threadtest;  

public class Test1 {  
    /* 
     * 两个线程,一个打印1-100的奇数,一个打印1-100的偶数;要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环。 
     */  
    private static int state = 1;  
    private static int num1 = 1;  
    private static int num2 = 2;  

    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        final Test1 t = new Test1();  
        new Thread(new Runnable(){  
            @Override  
            public void run(){  
                while(num1<100){  
                    //两个线程都用t对象作为锁,保证每个交替期间只有一个线程在打印  
                    synchronized(t){  
                         // 如果state!=1, 说明此时尚未轮到线程1打印, 线程1将调用t的wait()方法, 直到下次被唤醒    
                        if(state!=1){  
                            try{  
                                t.wait();  
                            }catch(InterruptedException e){  
                                e.printStackTrace();  
                            }  
                        }  
                        // 当state=1时, 轮到线程1打印5次数字  
                        for(int j=0;j<5;j  ){  
                            System.out.println(num1);  
                            num1  =2;  
                        }  
                        // 线程1打印完成后, 将state赋值为2, 表示接下来将轮到线程2打印    
                        state = 2;    
                        // notifyAll()方法唤醒在t上wait的线程2, 同时线程1将退出同步代码块, 释放t锁    
                        t.notifyAll();    
                    }  
                }  
            }  
        }).start();  

        new Thread(new Runnable(){  
            @Override  
            public void run(){  
                while(num2<100){  
                    synchronized(t){  
                        if(state!=2){  
                            try{  
                                t.wait();  
                            }catch(InterruptedException e){  
                                e.printStackTrace();  
                            }  
                        }  

                        for(int i=0;i<5;i  ){  
                            System.out.println(num2);  
                            num2  =2;  
                        }  

                        state=1;  
                        t.notifyAll();  
                    }  

                }                 
            }  
        }).start();       
    }  
}  

咱俩精晓,Computer最大旨的操作单元是字节(byte),2个字节由柒个位(bit)组成,三个位只可以积累一个0或一,其实也正是高低电平。无论多么繁杂的逻辑、变得庞大的数目、炫人眼目的分界面,最终反映在管理器最头部都只是对0拾1的囤积和平运动算。因而,领悟位运算有助于进步大家对Computer底层操作原理的知道。

不使用synchronized

=====================================

package com.pb.thread.demo4;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
 * 一个线程加一运算,一个线程做减法运算,多个线程同时交替运行
 * @author Denny
 *
 */
public class Count {
    private int num = 0;
    private boolean flag=false; // 标识
    Lock lock = new ReentrantLock(); // 锁
    Condition add = lock.newCondition(); // 加法锁
    Condition sub = lock.newCondition();// 减法锁

    public void add() {
        lock.lock();// 锁上
        try {
            while (flag) {  //循环判断

                add.await();
            }
            this.num  ;
            System.out.println(Thread.currentThread().getName()   "........"   this.num);
            this.flag = true; // 设置标识
            sub.signal(); // 唤醒指定线程
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally{
            lock.unlock();
        }


    }

    public void sub() {
        lock.lock();// 锁上
        try {
            while (!flag) {//循环判断

                sub.await();
            }
            this.num--;
            System.out.println(Thread.currentThread().getName()   "........"   this.num);
            this.flag = false; // 设置标识
            add.signal(); // 唤醒指定线程
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally{
            lock.unlock();
        }


    }

}

 

今日就来探视怎么不行使显式“ - * /”运算符来完毕加减乘除运算。

 

 

 

package com.pb.thread.demo4;

public class Add implements Runnable {
    private Count count;
    public Add(Count count){
        this.count=count;
    } 

    @Override
    public void run() {
        while(true){
            count.add();
        }

    }

}

 

 

package com.pb.thread.demo4;

public class Sub implements Runnable {
    private Count count;
    public Sub(Count count){
        this.count=count;
    } 

    @Override
    public void run() {
        while(true){
            count.sub();
        }

    }

}

 

 

package com.pb.thread.demo4;

public class CountTest {

    public static void main(String[] args) {
        Count c=new Count();
        Add add=new Add(c);

        Sub sub=new Sub(c);
        Thread t1=new Thread(add);
        Thread t2=new Thread(add);
        Thread t3=new Thread(sub);
        Thread t4=new Thread(sub);
        t1.start();
        t2.start();
        t3.start();
        t4.start();

    }

}

下边大家一个一个来看。

本文由澳门新葡亰发布于计算机知识,转载请注明出处:线程交替运行,位运算实现加【澳门葡萄京官方

关键词: 算法 java基础 Unity游戏... unity3D...

上一篇:0主要不相同

下一篇:没有了

最火资讯