zoukankan      html  css  js  c++  java
  • synchronized关键字的使用简单实例

     1 package edu.thread.test;
     2 
     3 public class ThreadTest2 implements Runnable {
     4     @Override
     5     public void run() {
     6         getTicket();
     7     }
     8 
     9     /**
    10      * 得到车票
    11      */
    12     private synchronized void getTicket() {
    13         while (true) {
    14             System.out.println(Thread.currentThread().getName());// 得到当前线程名称
    15             try {
    16                 Thread.currentThread().sleep(1000);// 睡眠
    17             } catch (InterruptedException e) {
    18                 // TODO Auto-generated catch block
    19                 e.printStackTrace();
    20             }
    21         }
    22     }
    23 
    24     public static void main(String[] args) {
    25         ThreadTest2 test = new ThreadTest2();
    26         // 新建线程启动购买车票
    27         new Thread(test).start();
    28         new Thread(test).start();
    29         new Thread(test).start();
    30         new Thread(test).start();
    31         while (true) {
    32             System.out.println("main....");
    33             try {
    34                 Thread.currentThread().sleep(1000);// 睡眠
    35             } catch (InterruptedException e) {
    36                 // TODO Auto-generated catch block
    37                 e.printStackTrace();
    38             }
    39 
    40         }
    41     }
    42 
    43 }
    44 /*
    45  * 解释: synchronized方法是保持类的实例同时只能调用一次,直到方法运行结束才允许下一次调用。 但是如果
    46  * synchronized方法存在睡眠或暂停,则将CPU给其他线程使用,但是期间还是持有该方法的锁, 任何调用该方法都将阻塞
    47  */

    运行结果:

    运行结果分析:

    synchronized方法是保持类的实例同时只能调用一次,直到方法运行结束才允许下一次调用。 

    但是如果synchronized方法存在睡眠或暂停,则将CPU给其他线程使用,但是期间还是持有该方法的锁, 任何调用该方法都将阻塞

  • 相关阅读:
    js兼容性——获取当前浏览器窗口的宽高
    pip 换源
    5 二分查找 算法
    顺序查找 冒泡 快排 等
    4 顺序表和链表
    python垃圾回收机制
    3 栈 队列 双头队列
    2 数据结构的性能分析 timeit
    1 时间复杂度
    线程池 爬取一本小说
  • 原文地址:https://www.cnblogs.com/afluy/p/3255248.html
Copyright © 2011-2022 走看看