线程间同步的方法

 时间:2024-10-11 18:41:31

1、首先我们得带着戒彬尢欤问题去学习,线程为何会有同步一说?在java中是允许多线程并发控制,当有多个线程同时操作同一个资源时,很有可能导致数据不准确,相互之间产生冲突。恐糍咦鞅打个比方:我们买火车票时某个车次的火车票只剩一张,而正好A和B同时进行购买该车票,在不同步的情况下A和B可能会都收到购买成功的结果,他们购买到的是同一张票,这显然不合理。而在同步的情况下是不可能出现该种情况的。所以加入同步锁是为了避免在该线程没完成操作之前不被其他线程调用,从而达到资源的唯一性和准确性。我这用的是NetBeans估计非主流了,现在大多用的是myeclipse/eclipse。如图:

线程间同步的方法
线程间同步的方法

2、新建一个项目,我这就叫Thread_demo了。名字看自己心情命名就好。

线程间同步的方法

3、同步方法:synchronized关键字修饰的方法即为方法的同步代码:publicsynchronized void 方法名() { 需要同步的内容...}如图:

线程间同步的方法

4、同步代码块:synchronized关键字修饰的语句块即为方法块的同步代码:synchronized(object){ 需要同步的内容...}如图:

线程间同步的方法

5、线程的同步对电脑的开销是很大的,我们应该尽量避免同步的使用,或者说能缩小同步的范围就尽量减少,能同步代码块的就不要去同步整邗锒凳审个方法。下面附上线程同步的运用:package thread_demo;/**** @author Admin*/public class Thread_Demo { class Bank { private int account = 100; public int getAccount() { return account; } /** * 同步方法实现 * @param money */ public synchronized void add(int money) { account += money; } /** * 同步代码块实现 * @param money */ public void add1(int money) { synchronized (this) { account += money; } } } class CreateThread implements Runnable { private Bank bank; public CreateThread(Bank bank) { this.bank = bank; } @Override public void run() { for (int i = 0; i < 10; i++) { bank.add(10); System.out.println(i + "账户余额:" + bank.getAccount()); } } } /** * 建立线程,调用内部类 */ public void exeThread() { Bank bank = new Bank(); CreateThread new_thread = new CreateThread(bank); System.out.println("线程1"); Thread thread1 = new Thread(new_thread); thread1.start(); System.out.println("线程2"); Thread thread2 = new Thread(new_thread); thread2.start(); } public static void main(String[] args) { Thread_Demo td = new Thread_Demo(); td.exeThread(); }}如图:1:为加synchronized关键词的结果,即同步得到的结果2:为不加synchronized关键词的结果,即不同步得到的结果

线程间同步的方法
线程间同步的方法
  • 真我q3怎样启用返回键
  • 社会热点—读书习惯剖析
  • 对中药养生保健的一些认识!
  • 360搜索如何提交网站
  • 折叠轮椅怎么带上飞机
  • 热门搜索
    文明小学生手抄报 英语故事手抄报 垃圾减量分类手抄报 初一地理手抄报 梦想手抄报图片 数学手抄报版面设计 健康教育手抄报资料 法制安全手抄报资料 关于桥的手抄报图片 勤俭节约的手抄报