public class TestSyn implements Runnable{
public int b=3000;
public void m1() throws Exception{
//System.out.println("b="+b);
b-=1000;
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+"b===="+b);
}
public synchronized void m2()throws Exception{
b-=2000;
Thread.sleep(5000);
System.out.println("b==========="+b);
}
public void run(){
try{m2();
}catch(Exception e){e.printStackTrace();}
}
public static void main(String[] args) throws Exception{
TestSyn t=new TestSyn();
Thread t1=new Thread(t);
t1.setName("t1-----");
t1.start();
Thread.sleep(1000);//主线程睡眠1秒,以保证线程t1先执行
t.m1();
System.out.println("b========================="+t.b);
}
}
以上程序主线程睡眠1秒,所以线程t1先执行,赋值b-=2000;b的值变成1000
后进入睡眠Thread.sleep(5000);
这是主线程睡眠1秒后执行t.m1();b的值变成0
运行结果
mainb====0
b=========================0
b===========0
如果m1方法也同步后,即
public synchronized void m1() throws Exception{
//System.out.println("b="+b);
b-=1000;
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+"b===="+b);
}
这是线程t1先执行,b-=2000;后b的值为1000,睡眠5秒;m1也同步了,他们都对b的值进行修改,所以必须等m2执行完后再执行m1方法。
运行结果:
b===========1000
mainb====0
b=========================0
分享到:
相关推荐
在Java多线程编程中,synchronized关键字是实现线程同步的关键工具,它主要用于解决多线程环境下资源的竞争问题,确保数据的一致性和完整性。本文将深入探讨synchronized的使用、原理以及它在Java多线程中的作用。 ...
Java多线程同步是指在Java语言中,如何使用synchronized关键字和其他同步机制来确保多线程程序的正确执行。在Java语言中,synchronized关键字用于对方法或者代码块进行同步,但是仅仅使用synchronized关键字还不能...
Java 线程同步机制中 synchronized 关键字的理解 Java 的线程同步机制是为了解决多个线程共享同一片存储空间所带来的访问冲突问题。其中,synchronized 关键字是 Java 语言中解决这种冲突的重要机制。 ...
为了实现线程同步,Java提供了多种机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口(如ReentrantLock)等。在这个示例中,我们可能会用到synchronized关键字来修饰购票的方法,这样...
在Java中,线程同步主要通过`synchronized`关键字来实现,防止多个线程同时访问临界区,以避免出现不可预期的结果。 1. **synchronized修饰同步方法** 使用`synchronized`关键字修饰的方法称为同步方法。同步方法...
"多线程的批量线程同步解决方案"这个标题暗示我们探讨的是如何在多线程环境下有效地管理和同步多个任务,确保数据一致性与程序正确性。下面将详细阐述相关知识点。 一、多线程基础 多线程是指在一个进程中同时执行...
.NET中的多线程同步是确保在并发环境下多个线程安全访问共享资源的关键技术。本文将深入探讨.NET框架中实现线程同步的多种方法。 首先,我们来看自由锁(InterLocked)。自由锁主要通过Interlocked类提供的静态方法来...
Java 中的 synchronized 关键字可以用于实现线程同步。synchronized 关键字可以用来锁定对象或方法,防止多个线程同时访问同一个共享资源。 在 Java 中,还有其他线程同步机制,如volatile 变量、Atomic 变量、Lock...
在这个“线程同步解决火车站售票问题”的例子中,我们可以通过线程同步机制来实现售票的有序、无冲突的过程。 首先,我们需要理解问题的核心:10个售票处(线程)需要共享1000张票(资源),并且每卖出一张票,必须...
synchronized关键字提供了基本的线程同步,而wait-notify机制和Lock接口则提供了更高级的线程通讯和控制手段。在实际开发中,根据具体需求选择合适的同步策略,可以提高程序的效率和正确性。通过学习和实践...
在Java中,线程同步可以通过多种方式实现,其中最常见的就是`synchronized`关键字和显式锁(如`ReentrantLock`)。在本案例中,使用的是`synchronized`关键字。 1. **synchronized关键字**:当`synchronized`用于...
`synchronized`关键字是Java中实现线程同步的主要手段之一。这篇文档主要讨论了如何使用`synchronized`关键字来控制多线程对共享数据的访问。 首先,`synchronized`关键字有两种主要的用法:修饰实例方法和修饰代码...
`synchronized`关键字是Java提供的一种内置锁机制,用于实现线程同步。以下是关于`synchronized`关键字的详细解释和应用场景: 1. **synchronized实例方法**: 当一个方法被声明为`synchronized`时,这意味着该...
操作系统实验是计算机科学教育中的重要组成部分,它帮助学生理解和掌握操作系统的基本原理,特别是多线程同步与互斥的概念。在Java编程环境下,这些概念可以通过实际的代码实现来深入理解。 多线程是现代操作系统中...
然而,多线程同时也带来了线程安全的问题,这就需要我们掌握线程同步方案来确保数据的一致性和完整性。本文将深入探讨iOS中的线程同步策略,包括互斥锁、自旋锁和递归锁。 1. **互斥锁(Mutex)**: 互斥锁是一种...
Java提供了多种机制来实现线程同步,主要包括synchronized关键字、wait()、notify()和notifyAll()方法以及ReentrantLock等。 1. **synchronized关键字**:这是Java中最基本的线程同步方式。它可以用于修饰方法或...
在Java中,我们可以使用`synchronized`关键字来实现线程同步。 线程同步在Java中主要有两种实现方式: 1. **同步方法**:通过在方法声明前加上`synchronized`关键字,可以使得整个方法成为同步方法。这意味着每次...
总结起来,`@synchronized`是一种便捷的多线程同步手段,通过递归互斥锁实现代码的原子性。在使用时应注意以下几点: 1. `@synchronized`是基于对象的,传入的对象不能为`nil`,否则无效。 2. 由于使用了递归锁,它...