`
sgl124764903
  • 浏览: 170734 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
社区版块
存档分类
最新评论

线程同步加锁问题

    博客分类:
  • J2SE
阅读更多
public class TT implements Runnable {

	int b=100;
	public synchronized void m1() throws InterruptedException{
		System.out.println("m1开始执行");
		b=1000;
		Thread.sleep(5000);
		System.out.println("m1:"+b);
	}
	public synchronized void m2() throws InterruptedException{
		
		System.out.println("m2开始执行");
		Thread.sleep(2500);
		b=2000;
		System.out.println("m2:"+b);
	}
	public void run()  {
		System.out.println("run开始执行");
		try {
			m1();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws InterruptedException {
		TT tt=new TT();
		Thread t=new Thread(tt);
		t.start();
		
		//Thread.sleep(1);
		tt.m2();
		
		System.out.println("main:"+tt.b);
	}

}

 m2开始执行
run开始执行
m2:2000
main:2000
m1开始执行
m1:1000

public class TT implements Runnable {

	int b=100;
	public synchronized void m1() throws InterruptedException{
		System.out.println("m1开始执行");
		b=1000;
		Thread.sleep(5000);
		System.out.println("m1:"+b);
	}
	public  void m2() throws InterruptedException{
		
		System.out.println("m2开始执行");
		Thread.sleep(2500);
		b=2000;
		System.out.println("m2:"+b);
	}
	public void run()  {
		System.out.println("run开始执行");
		try {
			m1();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws InterruptedException {
		TT tt=new TT();
		Thread t=new Thread(tt);
		t.start();
		
		//Thread.sleep(1);
		tt.m2();
		
		System.out.println("main:"+tt.b);
	}

}

 m2开始执行
run开始执行
m1开始执行
m2:2000
main:2000
m1:2000

分享到:
评论

相关推荐

    C#代码_线程同步线程同步线程同步线程同步线程同步线程同步

    线程同步线程同步线程同步线程同步线程同步C#代码

    Linux系统编程之线程同步

    线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。 举例1: 银行存款 5000。柜台,折:取3000;提款机,卡:取 3000。剩余:2000 举例2...

    加锁实现线程同步代码...

    使用加锁机制实现线程同步,从自己项目中摘取下来的。很适合初学者学习,代码编译的时候需要加 -lpthread

    11.Linux线程同步

    文章目录一、线程同步的概念二、互斥锁1、初始化锁2、阻塞加锁3、非阻塞加锁4、解锁5、销毁锁(此时锁必需unlock状态,否则返回EBUSY)三、示例程序四、版权声明 一、线程同步的概念 线程同步?怎么同步?一起运行?...

    Java多线程编程 线程同步机制.docx

    锁正是基于这种思路实现的一种线程同步机制。 在对共享数据加锁后,每个线程在访问共享数据时必须先申请相应的锁。一旦获得锁后,就可以访问共享数据,并且一个锁同一时刻只能被一个线程持有,这意味着获得锁后不会...

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

    3.线程间同步和通信之互斥锁(动态),通过按键和LED的组合学习互斥锁的功能,理解互斥锁

    Python 多线程不加锁分块读取文件的方法

    多线程读取或写入,一般会涉及到同步的问题,否则产生的结果是无法预期的。那么在读取一个文件的时候,我们可以通过加锁,但读不像写操作,会导致文件错误,另外锁操作是有一定的耗时。因此通过文件分块,可以比较...

    freelockqueue(多线程不需要加锁的队列性能很高)

    在多线程情况下,C#的队列入队和出队时需要现场同步,但这样会损失性能,此开源队列可以不需要同步,就能实现多线程操作,极大的提高了程序的运行效率

    MultiThreadLockDemo.rar

    多线程同步Interlocked。多线程中,部分任务需要进行同步操作,对线程进行加锁操作,确保某个任务A抢到资源进行时,其他任务暂停等待,直到任务完成,其他任务才会顺序执行,类似于线程队列。此时可以使用lock,...

    Android jni 线程同步

    文章目录概述问题示例c++层java层结果解决办法java层加锁c++层加锁java层和c++层共用一个锁 概述 android中可以通过jni调用native的方法,那么如果在java中存在多个线程调用native的方法,它的展现形式是如何呢? 先...

    java多线程通信图解

    java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...

    Qt加锁操作、文件锁、生产消费锁GUI演示

    使用VS2019开发,Qt 界面程序。详细演示了锁对多线程访问资源时的影响,文件锁,消费生产锁模型,对学习线程同步和 Qt GUI 编程开发具有指导意义。如有不懂可私信博主,支持自定义更新。

    C#多线程例子

    C#关于多线程开发技术的例子,这个代码是结合多线程案例自己写的一个程序,模拟图书馆借阅书籍,在同时发生书籍搜索的时候进行的一些线程同步和加锁机制。

    C#线程锁介绍源码

    互斥体Mutex和事件对象EventWaitHandler属于内核对象,利用内核对象进行线程同步,线程必须要在用户模式和内核模 式间切换,所以一般效率很低,但利用互斥对象和事件对象这样的内核对象,可以在多个进程中的各个...

    Python多线程实现同步的四种方式

    临界资源即那些一次只能被一个线程访问的资源,典型例子就是打印机,它一次只能被一个程序用来执行打印功能,因为不能多个线程同时操作,而访问这部分资源的代码通常称之为临界区。 锁机制 threading的Lock类,用该...

    C#多线程全面编程4例

    可以全面学习C#线程编程。包括建立、同步、加锁、线程合作等内容。

    python多线程编程示例(threading.py)

    Unix调度较快),缺点是线程之间的同步和加锁比较麻烦。 2、Python多线程创建 在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用 更高级的threading模块。

    在C#下详细讲解几种同步线程的方法

    这个PPT讲解了在.net 下进行手工线程同步的几种方式和方法。详细的讲解了监视器,加锁,解锁,互斥,信号,互锁的详细使用方法。

    C#解决SQlite并发异常问题的方法(使用读写锁)

    使用C#访问sqlite时,常会遇到多线程并发导致SQLITE数据库损坏的问题。 SQLite是文件级别的数据库,其锁也是文件级别的:多个线程可以同时读,但是同时只能有一个线程写。Android提供了SqliteOpenHelper类,加入Java...

    C#中实现线程同步lock关键字的用法详解

    1. lock关键字保证一个代码块在执行的过程中不会受到其他线程的干扰,这是通过在该代码块的运行过程中对特定的对象加互斥锁来实现的。 2. lock关键字的参数必须是引用类型的对象。lock对基本数据类型如int,long等...

Global site tag (gtag.js) - Google Analytics