Java同步代码块和同步方法原理与应用案例详解
本文实例讲述了Java同步代码块和同步方法。分享给大家供大家参考,具体如下:
一点睛
所谓原子性:一段代码要么执行,要么不执行,不存在执行一部分被中断的情况。言外之意是这段代码就像原子一样,不可拆分。
同步的含义:多线程在代码执行的关键点上,互通消息,相互协作,共同把任务正确的完成。
同步代码块语法:
synchronized(对象) { 需要同步的代码块; }
同步方法语法:
访问控制符synchronized返回值类型方法名称(参数) { 需要同步的代码; }
二同步代码块完成卖票功能
1代码
publicclassthreadSynchronization { publicstaticvoidmain(String[]args) { TestThreadt=newTestThread(); //启动了四个线程,实现资源共享 newThread(t).start(); newThread(t).start(); newThread(t).start(); newThread(t).start(); } } classTestThreadimplementsRunnable { privateinttickets=5; @Override publicvoidrun() { while(true) { synchronized(this) { if(tickets<=0) break; try { Thread.sleep(100); } catch(Exceptione) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"出售票"+tickets); tickets-=1; } } } }
2运行
Thread-0出售票5
Thread-3出售票4
Thread-3出售票3
Thread-2出售票2
Thread-2出售票1
三同步方法完成买票功能
1代码
publicclassthreadSynchronization { publicstaticvoidmain(String[]args) { TestThreadt=newTestThread(); //启动了四个线程,实现资源共享的目的 newThread(t).start(); newThread(t).start(); newThread(t).start(); newThread(t).start(); } } classTestThreadimplementsRunnable { privateinttickets=5; publicvoidrun() { while(tickets>0) { sale(); } } publicsynchronizedvoidsale() { if(tickets>0) { try { Thread.sleep(100); } catch(Exceptione) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"出售票" +tickets); tickets-=1; } } }
2运行
Thread-0出售票5
Thread-0出售票4
Thread-3出售票3
Thread-2出售票2
Thread-1出售票1
更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。