博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11,多线程示例代码
阅读量:5869 次
发布时间:2019-06-19

本文共 3671 字,大约阅读时间需要 12 分钟。

实例1

package 多线程;/* * 多窗口售票 * 此程序为错误程序,每张票买了四次 * */class ticket extends Thread{    private int ticket=100;    public void run()    {        while(true)        {            if(ticket>0)            {                    System.out.println("sales:"+ticket--);            }        }    }    }public class tick {    public static void main(String[] args)    {        ticket t0=new ticket();        ticket t1=new ticket();        ticket t2=new ticket();        ticket t3=new ticket();        t0.start();            t1.start();        t2.start();        t3.start();    }    }

示例代码2

解决多线程共享变量问题:声明实现runnable接口的类

解决打印0,-1,-2票:使用同步代码块

package 多线程;/* * 多窗口售票 * implements Runnable * */class ticket implements  Runnable{    private int ticket=100;    public void run()    {        while(true)        {            synchronized (this) {                if(ticket>0)                {    try{Thread.sleep(10);}catch(Exception e){}                    System.out.println(Thread.currentThread().getName()+"sales:"+ticket--);                }            }        }    }    }public class tick {    public static void main(String[] args)    {                ticket t=new ticket();        Thread Th0=new Thread(t);        Thread Th1=new Thread(t);        Thread Th2=new Thread(t);        Thread Th3=new Thread(t);        Th0.start();            Th1.start();        Th2.start();        Th3.start();    }    }

同步代码函数

package song.yan;class Bank{    private int sum;    //同步代码块    /*public void add(int n)    {        synchronized(this)        {            sum=sum+100;            try{Thread.sleep(100);}catch(Exception e){}            System.out.println("sum="+sum);                }            }*/    //同步函数    public synchronized void add(int n)    {        sum=sum+100;        try{Thread.sleep(100);}catch(Exception e){}        System.out.println("sum="+sum);                    }}class Demos implements Runnable{    private Bank b= new Bank();        public void run()    {        for(int i=0;i<3;i++)        {            b.add(100);        }    }}public class tick{    public static void main(String[] args) {        Demos d=new Demos();        Thread t1=new Thread(d);        Thread t2= new Thread(d);        t1.start();        t2.start();    }    }

//

package song.yan.com;/* * 将同步设在run() * 将变成单线程问题 *  * */class Ticks implements Runnable{    private int num=1000;        public synchronized  void run()    {        while(true)        {            if(num>0)            {                System.out.println(Thread.currentThread().getName()+"num="+num--);            }                    }            }}public class tick{    public static void main(String[] args) {        Ticks d=new Ticks();        Thread t1=new Thread(d);        Thread t2= new Thread(d);        Thread t3=new Thread(d);        Thread t4= new Thread(d);        t1.start();        t2.start();        t3.start();        t4.start();    }    }

正确使用同步函数:将需要同步的部分单独写在synconized函数中,在run函数中调用

package song.yan.com;/* * 将同步设在run() * 将变成单线程问题 *  * */class Ticks implements Runnable{    private int num=2000;        public   void run()    {        while(true)        {            show();                    }            }    public synchronized void show()    {        if(num>0)        {            System.out.println(Thread.currentThread().getName()+"num="+num--);        }    }}public class tick{    public static void main(String[] args) {        Ticks d=new Ticks();        Thread t1=new Thread(d);        Thread t2= new Thread(d);        Thread t3=new Thread(d);        Thread t4= new Thread(d);        t1.start();        t2.start();        t3.start();        t4.start();    }    }

 

转载于:https://www.cnblogs.com/exexex/p/8419096.html

你可能感兴趣的文章
TFT LCD 7寸1024*600 FPGA点亮
查看>>
request.getInputStream()乱码处理方法
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
iOS中perform+@selector多参数传递
查看>>
Mysql列类型:日期时间型
查看>>
java 编程中的非空判断怎么加才优雅?
查看>>
zookeeper的原理及应用
查看>>
如何阅读一本书(记录)
查看>>
BGP选路方法
查看>>
2011年度十大杰出IT博客
查看>>
SAS硬盘指示灯状态对照表
查看>>
java并发编程系列阅读笔记
查看>>
Configuring Hive On Spark
查看>>
spring boot中实现响应图片的方法以及改进
查看>>
Leetcode日记8
查看>>
Java多线程技能
查看>>
从 Project Professional 中登录 Project Server
查看>>
单链表的一些经典面试题
查看>>
frameset iframe frame之间的区别
查看>>
Python转义字符
查看>>