`
wststar
  • 浏览: 17823 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

多线程--静态同步函数用的是哪一种锁呢?

 
阅读更多

 

/**

多线程--静态同步函数用的是哪一种锁呢?


通过验证 发现不再是this  因为静态方法中也不可以定义this


静态近内存时 内存中没有本类对象 但是一定有该类对应的自己码文件对象

类名.class  该对象的类型是Class


静态的同步方法 使用的是该方法所在类的自己码文件对象 类名.class



*/


class Ticket implements Runnable

{

private static int ticketNum = 100;

boolean flag = true;


public void run(){

if(flag){

while(true){

synchronized(Ticket.class){

if(ticketNum>0){

try{

Thread.sleep(10);

}catch(Exception e){

}

System.out.println(Thread.currentThread().getName()+"code:..." + ticketNum--);

}

}

}

}else{

while(true){

show();

}

}

}


public static synchronized void show(){

if(ticketNum>0){

try{

Thread.sleep(10);

}catch(Exception e){

}

System.out.println(Thread.currentThread().getName()+"show:..." + ticketNum--);

}

}


}


class  StaticMathodDemo

{

public static void main(String[] args) 

{


Ticket t = new Ticket();


Thread t1 = new Thread(t);//创建了一个线程

Thread t2 = new Thread(t);//创建了一个线程

t1.start();

try{

Thread.sleep(10);

}catch(Exception e){


}

t.flag = false;

t2.start();


}

}


分享到:
评论

相关推荐

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    多线程实例源码11.rar--win32线程同步5大方案例程

    《多线程实例源码11.rar--win32线程同步5大方案例程》是一个专注于Windows操作系统下的多线程编程的资源包,其中包含了五个不同的线程同步方案的实例代码。线程同步是多线程编程中的关键概念,确保了在并发执行的...

    dotnet 谨慎在静态构造函数里使用锁.rar

    在多线程环境中,如果在静态构造函数中使用锁,可能会导致死锁或性能下降。原因在于,静态构造函数已经隐含了线程安全性,添加锁可能会与.NET运行时的内部同步机制冲突,增加不必要的复杂性。此外,由于静态构造函数...

    可重入函数与线程安全函数

    2. **使用线程私有数据**:线程私有数据(Thread Private Data, TPD)是一种为每个线程提供独立数据副本的方法。通过这种方式,可以确保每个线程都有自己的数据副本,从而避免了数据共享引起的竞争条件。 3. **使用...

    创建多线程线程同步

    在Windows API中,CEVENT对象是一种同步对象,用于线程间的通信和同步。通过`CreateEvent`函数创建,可设置为手动重置或自动重置事件。手动重置事件在被一个线程释放后,必须由其他线程显式重置,否则会一直保持有...

    多线程编程指南PDF

    - **安全地Fork**:确保在多线程环境中正确使用`fork()`函数。 - **终止线程**:结束线程的执行。 - **结束**:线程正常退出。 - **取消线程**:取消正在运行的线程。 #### 四、线程属性 - **属性对象**:用于...

    3.线程间同步和通信之互斥锁(静态)

    在本教程中,我们将探讨“互斥锁”这一机制,它是实现线程同步的一种常见方法。互斥锁在STM32微控制器上使用RT-thread实时操作系统时尤为重要。 首先,我们要理解什么是互斥锁。互斥锁,英文名为Mutex,是一种同步...

    多线程的使用与线程锁的两种实现

    本主题将深入探讨多线程的使用以及线程锁的两种主要实现方式: synchronized关键字和ReentrantLock。 一、多线程基础 1. 线程创建: - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写run()方法。然后...

    Linux多线程-相关手写笔记

    在Linux操作系统中,多线程是一种程序执行方式,它允许多个执行流同时在单个进程中运行。这种并发执行能够提高资源利用率,特别是在处理器核心数增多的情况下,多线程可以充分利用硬件资源,提升程序性能。本篇笔记...

    Qt 多线程访问同一个变量

    为了防止这种情况,我们需要一种机制来同步线程,确保同一时间只有一个线程可以访问该变量。 Qt提供了一个名为QMutex的类,它是一个互斥锁,用于实现线程同步。互斥锁的基本原理是,当一个线程获得锁后,其他试图...

    多线程同步(多线程如何访问临界区资源)

    临界区作为一种简单有效的同步机制,被广泛应用于各种多线程编程场景。理解并掌握临界区的使用,对于编写高效、可靠的多线程程序至关重要。在实际项目中,我们应根据需求选择合适的同步工具,如临界区、信号量、事件...

    Android JNI多线程编程回调JAVA函数

    本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...

    Qt两种方法实现多线程并安全结束线程及QMutex加锁Qt单例化实现

    - **线程同步**:QMutex是一种互斥锁,用于保护共享资源不被多个线程同时访问。在访问关键区域(可能引发竞争条件的部分)之前,应调用`lock()`,访问结束后调用`unlock()`。 - **加锁技巧**:确保每次`unlock()`...

    vc多线程编程简单介绍vc多线程编程简单介绍vc多线程编程简单介绍

    在Windows平台上,Visual C++(简称VC)是微软公司提供的一种强大的C++开发工具,它支持多线程编程,使得开发者能够创建同时执行多个任务的应用程序。多线程编程是现代软件开发中的一个重要概念,特别是在处理大数据...

    posix多线程编程

    在深入探讨POSIX多线程编程的细节之前,我们首先需要理解什么是线程以及为何要在Linux环境下使用pthread库进行多线程编程。 ### 一、何为线程?为何使用线程? 线程是操作系统能够进行运算调度的最小单位,它是...

    嵌入式软件开发技术:第5章 嵌入式Linux多线程编程.ppt

    嵌入式Linux多线程编程是嵌入式系统开发中的一种重要技术,能够提高系统的效率和响应速度。本章节将详细介绍嵌入式Linux多线程编程的基本概念、线程的创建、同步和互斥、线程属性、多线程实验等方面的知识点。 1. ...

    易语言多线程支持库2.1含静态库

    易语言多线程支持库2.1是一款专为易语言设计的库文件,它提供了在易语言编程环境中实现多线程功能的能力。多线程是现代计算机程序设计中一个重要的概念,它允许程序同时执行多个任务,提高了程序的运行效率和响应性...

Global site tag (gtag.js) - Google Analytics