美文网首页
java多线程(2)----实例解析

java多线程(2)----实例解析

作者: 蘑菇Ai布丁 | 来源:发表于2018-12-04 10:09 被阅读0次

上一篇我们讲了一下多线程的概念。这一篇,我们用一些比较简单的例子,来看看多线程在代码层次上的实现过程。我们现在和之后将的所有多线程,都将采用实现Runnable 接口的方式,因为我比较喜欢这个方式。。。我们来用两种方式进行同步锁,这两个例子都是网上随便找的,这里就是做一个总结。

一:synchronized

public class PickRunnableimplements Runnable{

    private Integertickettotal =100;

    @Override

    public void run() {

        while (true) {

            synchronized (this) {

                if (tickettotal >0) {

                    try {

                        Thread.sleep(1000);

                    }catch (InterruptedException e) {

                        // TODO Auto-generated catch block

                        e.printStackTrace();

                    }

                System.out.println(Thread.currentThread().getName() +"售出了第" + (tickettotal--) +"张票");

            }

           }

        }

    }

}

二:lock()和unlock()

// 定义锁

private Locklock =new ReentrantLock();

@Override

public void run() {

        while (true) {

            lock.lock();

            if (tickettotal >0) {

                try {

                    Thread.sleep(1000);

                }catch (InterruptedException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            System.out.println(Thread.currentThread().getName() +"售出了第" + (tickettotal--) +"张票");

        }

        lock.unlock();

    }

}

三:在主方法中调用

PickRunnable pickRunnable =new PickRunnable();

Thread t1 =new Thread(pickRunnable,"第一售票厅");

Thread t2 =new Thread(pickRunnable,"第二售票厅");

Thread t3 =new Thread(pickRunnable,"第三售票厅");

t1.start();

t2.start();

t3.start();

这里可以看到我们的线程里面,在run方法中,都加了一个while(true),为什么呢,其实这个while不是强制要加的,只不过,run方法本身不会自己循环,只执行一次,所以需要循环的,必须要加个while,但是如果只要求执行一次的,可以不加。

还要特别注意synchronized是非公平锁,随机获得锁,不一会会按照执行顺序执行。lock()和unlock()是公平锁,

相关文章

  • java多线程(2)----实例解析

    上一篇我们讲了一下多线程的概念。这一篇,我们用一些比较简单的例子,来看看多线程在代码层次上的实现过程。我们现在和之...

  • Java多线程-实例解析

    Java多线程实例 3种实现方法 Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Th...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • GraphQL Java从入门到实践

    源码解析 GraphQL Java 从Schema文件到GraphQL实例GraphQL Java 一次完整的执行...

  • Java的基本概念-1

    JAVA介绍 面向对象程序和java平台总称不使用指针,使用引用支持多线程 Java基础语法 对象:类的实例,分为...

  • java反射

    参考:深入解析Java反射(1) - 基础 获取class对象 判断是否某个类实例 创建实例 获取方法 getDe...

  • Linux多线程实例解析

    Linux系统下的多线程遵循POSIX线程接口,称为 pthread。编写Linux下的多线程程序,需要使用头文件...

  • iOS-多线程相关

    本篇涵盖多线程解析、应用等. 1.iOS多线程--彻底学会多线程之『RunLoop』2.iOS多线程--彻底学会多...

  • Android中的多线程

    1. Java多线程基础 Java多线程,线程同步,线程通讯 2. Android常用线程 HandlerThre...

  • Java并发之synchronized

    Java多线程同步关键词是常用的多线程同步手段。它可以修饰静态类方法,实例方法,或代码块。修饰static静态方法...

网友评论

      本文标题:java多线程(2)----实例解析

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