要了解线程同步的方法,首先要知道什么是线程,然后知道线程是如何创建的,再实现线程同步。什么是线程?线程是计算机程序运行的最小单位。当计算机程序运行时,将存在一个或多个线程。下面我会用java代码解释线程间的同步方法。
首先,我们要带着问题去学习。为什么线程是同步的?在java中,允许多线程并发控制。当多个线程同时操作同一个资源时,很可能造成数据不准确,相互冲突。比如我们买火车票,某次列车只剩一张火车票,恰好A和B同时在买票。在不同步的情况下,甲和乙可能都收到购买成功的结果,他们买的是同一张票,这显然是不合理的。这在同步的情况下是不可能的。因此增加了同步锁,避免在线程完成操作前被其他线程调用,从而达到资源的唯一性和准确性。我用的是NetBeans,大概是非主流。现在我大多用myeclipse/eclipse。如图所示:
创建新项目。我称之为Thread_demo。根据心情取个名字就行了。
同步方法:synchronized关键字修改的方法是该方法的同步代码:publicsynchronizedvoid方法名(){要同步的内容.}如图所示:
同步代码块:synchronized关键字修饰的语句块是方法块的同步代码:synchronized(object){要同步的内容.}如图所示:
线程同步对计算机来说代价很大。我们应该尽量避免使用同步,或者尽可能缩小同步的范围。如果可以同步代码块,就不要同步整个方法。附上线程同步的应用:packagethread _ demo/* * * * @ author admin */public class thread _ Demo { class bank { privateinaccount=100;publicintgetAccount(){ return account;}/* * *同步方法实现* @ param money */public synchronized Voidad(int money){ account=money;}/* * *同步代码块实现* @ param money */public void add 1(int money){ synchronized(this){ account=money;} } } classCreateThreadimplementsRunnable { privateBankbank;public create thread(bank bank){ this . bank=bank;} @ Overridepublicvoidrun(){ for(inti=0;i10I){ bank . add(10);System.out.println(i '账户余额:' bank . get account());}}}/* *构建一个线程,调用内部类*/publicfoidexthread(){ bank bank=new bank();createthread new _ thread=new createthread(bank);System.out.println(“线程1”);thread thread 1=new thread(new _ thread);thread 1 . start();system . out . println(“Thread 2”);thread thread 2=new thread(new _ thread);thread 2 . start();} publistaticvoidmain(String[]args){ Thread _ demod=new Thread _ Demo();TD . exethread();}}}如图:1:添加同步关键词的结果,即同步的结果;2:不添加同步关键词的结果,也就是不同步的结果。
特别提示
这只是大java中线程同步的一种形式~
读者朋友,如果有什么帮助,请用你的小手给个赞,投个票!