美文网首页
互斥与并发

互斥与并发

作者: 利刃华尔兹soalig | 来源:发表于2018-09-27 12:19 被阅读0次

    1、顺序控制

    package com.my;

    public class Demo {

    //创建线程对象

        private static Thread  t1;

        private static Thread  t2;

        private static Thread  t3;

        public static void main(String[] args)

        {

      //使用构造方法创建

            t1 = new Thread(new Runnable() {

                @Override

                public void run()

                {

                    System.out.println("t1");

                }

            });

            t2 = new Thread(new Runnable() {

                @Override

                public void run()

                {

                    try

                    {

    //当t1执行完毕 才能执行t2

                        t1.join();

                    }

                    catch (InterruptedException e)

                    {

                        e.printStackTrace();

                    }

                    System.out.println("t2");

                }

            });

            t3 = new Thread(new Runnable() {

                @Override

                public void run()

                {

                    try

                    {

    //同理 在t2执行完毕 才执行t3

                        t2.join();

                    }

                    catch (InterruptedException e)

                    {

                        e.printStackTrace();

                    }

                    System.out.println("t3");

                }

            });

    //启动线程

            t1.start();

            t2.start();

            t3.start();

        }

    }

    结果:

    t1

    t2

    t3

    Process finished with exit code 0

    2、互斥控制:

    package com.my;

    public class TicketOffice  {

        private int ticketNum = 0;

        public TicketOffice(int ticketNum)

        {

            super();

            this.ticketNum = ticketNum;

        }

            public int getTicketNum() {

            return ticketNum;

        }

        public void setTicketNum(int ticketNum)

        {

            this.ticketNum = ticketNum;

        }

            public void sellOneTicket(){

            ticketNum--;

        if(ticketNum >= 0){

            System.out.println("剩余: " + ticketNum);

        }else{

            System.out.println("失败!");

        }

        }

        public static void main(String[] args) {

    //初始化数为100

            final TicketOffice ticketOffice = new TicketOffice(100);

          for(int i=0;i<10;i++){

    //利用for循环 每次循环创建新的线程 执行售票函数,让线程无序并发,实现互斥效果

              new Thread(new Runnable(){

                  @Override

                    public void run() {

                      while(ticketOffice.getTicketNum() > 0){

                          ticketOffice.sellOneTicket();

                      } }

              }).start(); }

        }

        }

    结果:

    剩余: 99

    剩余: 98

    剩余: 97

    剩余: 96

    剩余: 94

    剩余: 95

    剩余: 91

    剩余: 92

    剩余: 93

    剩余: 87

    剩余: 85

    剩余: 88

    剩余: 89

    剩余: 81

    剩余: 80

    剩余: 79

    剩余: 77

    剩余: 76

    剩余: 75

    剩余: 90

    剩余: 73

    剩余: 74

    剩余: 78

    剩余: 82

    剩余: 82

    剩余: 66

    剩余: 65

    剩余: 64

    剩余: 62

    剩余: 84

    剩余: 86

    剩余: 60

    剩余: 61

    剩余: 57

    剩余: 63

    剩余: 67

    剩余: 68

    剩余: 68

    剩余: 70

    剩余: 71

    剩余: 72

    剩余: 50

    剩余: 51

    剩余: 52

    剩余: 46

    剩余: 45

    剩余: 53

    剩余: 54

    剩余: 42

    剩余: 41

    剩余: 40

    剩余: 39

    剩余: 26

    剩余: 25

    剩余: 24

    剩余: 23

    剩余: 22

    剩余: 11

    剩余: 10

    剩余: 9

    剩余: 8

    剩余: 7

    剩余: 6

    剩余: 5

    剩余: 4

    剩余: 3

    剩余: 2

    剩余: 1

    剩余: 0

    剩余: 28

    剩余: 33

    剩余: 36

    剩余: 43

    剩余: 44

    剩余: 47

    剩余: 48

    剩余: 49

    剩余: 19

    Process finished with exit code 0

    3、心得体会:

    利用java的thread类创建多线程,通过其函数实现对应的顺序控制和并发控制

    在顺序控制,通过join函数实现多个线程之间的先后顺序,保证了线程之间的调用结果,使程序结果出现可控的线程安排 避免了多线程之间调用的无序混乱。

    而在并发控制下,对于thread创建的线程对象直接调用,不加以控制,则会出现线程的并发效果 ,由程序结果可看到,因为不加以控制导致程序并发无序,相应的结果也是忽高忽低。逻辑混乱。

    在系统中,保证应用程序的有序执行是一个重要的环节,若是让程序不加以控制的一起执行,则会出现像互斥结果一样的无序混乱。使事务执行调用出现不稳定,不正确的结果。

    相关文章

      网友评论

          本文标题:互斥与并发

          本文链接:https://www.haomeiwen.com/subject/bmkeoftx.html