public class Text { //线程同步的5种方式 PRivate int index = 10; public int getIndex(){ return index; } /** * 用同步方法实现 * * @param dex */ public synchronized void saveValue(int dex){ index+=dex; } 2:使用同步代码块: 即有synchronized关键字修饰的语句块。public class Text { //线程同步的5种方式 private int index = 10; public int getIndex(){ return index; } /** * 用同步方法实现 * * @param dex */// public synchronized void saveValue(int dex){// index+=dex;// } /** * 用同步代码块实现 * * @param dex */ public void saveValue(int dex){ synchronized (this){ index+=dex; } } 3:使用特殊域变量(volatile)实现线程同步 a:volatile关键字为域变量的访问提供了一种免锁机制, b:使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新, c:因此每次使用该域就要重新计算,而不是使用寄存器中的值 d:volatile不会提供任何原子操作,它也不能用来修饰final类型的变量 其他代码不变,只需要在定义变量的时候用volatileprivate volatile int index = 10; 注意,不需要再使用synchronizedpublic void saveValue(int dex){ index+=dex;} 4:使用ReentrantLock类:public class Text { //线程同步的5种方式 private int index = 10; private Lock lock = new ReentrantLock(); public int getIndex(){ return index; } public void saveValue(int dex){ lock.lock(); try{ index+=dex; }finally{ lock.unlock(); } } 使用ReentrantLock类,注意要及时释放锁 5:使用局部变量实现线程同步 如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本, 副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。 ThreadLocal() : 创建一个线程本地变量 get() : 返回此线程局部变量的当前线程副本中的值 initialValue() : 返回此线程局部变量的当前线程的"初始值" set(T value) : 将此线程局部变量的当前线程副本中的值设置为valueprivate static ThreadLocal<Integer> index = new ThreadLocal<Integer>(){ @Override protected Integer initialValue() { return 10; } }; public int getAccount(){ return index.get(); }; public void save (int money){ index.set(index.get()+money); } 下面,我们来测试下用锁和不用锁的区别: 首先编写测试代码,public class Go { public static void main(String[] args) { Go go = new Go(); go.TestThread(); } public void TestThread(){ Text text = new Text(); NewThread th = new NewThread(text); System.out.println("线程1"); Thread thread1 = new Thread(th); thread1.start(); System.out.println("线程2"); Thread thread2 = new Thread(th); thread2.start(); } class NewThread implements Runnable{ private Text text; public NewThread(Text text){ this.text = text; } @Override public void run() { for (int i = 0; i < 200; i++) { text.saveValue(1); System.out.println(i + "账户余额为:" + text.getIndex()); } } }}在不用锁的情况下:我们看输出值0账户余额为:120账户余额为:121账户余额为:131账户余额为:142账户余额为:152账户余额为:163账户余额为:173账户余额为:184账户余额为:194账户余额为:205账户余额为:215账户余额为:226账户余额为:236账户余额为:247账户余额为:257账户余额为:268账户余额为:279账户余额为:298账户余额为:2810账户余额为:309账户余额为:3111账户余额为:3210账户余额为:3312账户余额为:3411账户余额为:3513账户余额为:3612账户余额为:3714账户余额为:3813账户余额为:3914账户余额为:4115账户余额为:4216账户余额为:4317账户余额为:4418账户余额为:4515账户余额为:4019账户余额为:4616账户余额为:4720账户余额为:4817账户余额为:4921账户余额为:5022账户余额为:5223账户余额为:5324账户余额为:5418账户余额为:5125账户余额为:5519账户余额为:5626账户余额为:5720账户余额为:5827账户余额为:5921账户余额为:6028账户余额为:6122账户余额为:6223账户余额为:6424账户余额为:6529账户余额为:6325账户余额为:6630账户余额为:6726账户余额为:6831账户余额为:6927账户余额为:7032账户余额为:7133账户余额为:7328账户余额为:7234账户余额为:7429账户余额为:7535账户余额为:7630账户余额为:7736账户余额为:7831账户余额为:7937账户余额为:8032账户余额为:8138账户余额为:8233账户余额为:8339账户余额为:8440账户余额为:8634账户余额为:8541账户余额为:8742账户余额为:8935账户余额为:8836账户余额为:9137账户余额为:9243账户余额为:9038账户余额为:9344账户余额为:9439账户余额为:9545账户余额为:9646账户余额为:9847账户余额为:9948账户余额为:10049账户余额为:10150账户余额为:10251账户余额为:10340账户余额为:9752账户余额为:10441账户余额为:10553账户余额为:10642账户余额为:10754账户余额为:10843账户余额为:10955账户余额为:11044账户余额为:11156账户余额为:11245账户余额为:11357账户余额为:11446账户余额为:11558账户余额为:11647账户余额为:11759账户余额为:11848账户余额为:11960账户余额为:12049账户余额为:12161账户余额为:12262账户余额为:12450账户余额为:12363账户余额为:12551账户余额为:12664账户余额为:12752账户余额为:12865账户余额为:12953账户余额为:13066账户余额为:13167账户余额为:13354账户余额为:13268账户余额为:13469账户余额为:13670账户余额为:13771账户余额为:13872账户余额为:13973账户余额为:14074账户余额为:14175账户余额为:14276账户余额为:14377账户余额为:14478账户余额为:14579账户余额为:14680账户余额为:14781账户余额为:14882账户余额为:14983账户余额为:15084账户余额为:15185账户余额为:15286账户余额为:15387账户余额为:15488账户余额为:15589账户余额为:15690账户余额为:15791账户余额为:15892账户余额为:15955账户余额为:13593账户余额为:16056账户余额为:16194账户余额为:16257账户余额为:16358账户余额为:16559账户余额为:16660账户余额为:16761账户余额为:16862账户余额为:16963账户余额为:17064账户余额为:17195账户余额为:16465账户余额为:17296账户余额为:17366账户余额为:17497账户余额为:17567账户余额为:17698账户余额为:17768账户余额为:17899账户余额为:17969账户余额为:180100账户余额为:18170账户余额为:182101账户余额为:18371账户余额为:184102账户余额为:18572账户余额为:186103账户余额为:18773账户余额为:188104账户余额为:18974账户余额为:190105账户余额为:19175账户余额为:192106账户余额为:19376账户余额为:194107账户余额为:19577账户余额为:196108账户余额为:19778账户余额为:198109账户余额为:19979账户余额为:200110账户余额为:20180账户余额为:202111账户余额为:20381账户余额为:204112账户余额为:20582账户余额为:206113账户余额为:20783账户余额为:208114账户余额为:20984账户余额为:210115账户余额为:21185账户余额为:212116账户余额为:21386账户余额为:214117账户余额为:21587账户余额为:216118账户余额为:21788账户余额为:218119账户余额为:21989账户余额为:220120账户余额为:22190账户余额为:222121账户余额为:22391账户余额为:224122账户余额为:22592账户余额为:226123账户余额为:22793账户余额为:228124账户余额为:22994账户余额为:230125账户余额为:23195账户余额为:232126账户余额为:23396账户余额为:234127账户余额为:23597账户余额为:236128账户余额为:23798账户余额为:238129账户余额为:23999账户余额为:240130账户余额为:241100账户余额为:242131账户余额为:243101账户余额为:244132账户余额为:245102账户余额为:246133账户余额为:247103账户余额为:248134账户余额为:249104账户余额为:250135账户余额为:251105账户余额为:252136账户余额为:253106账户余额为:254137账户余额为:255107账户余额为:256138账户余额为:257108账户余额为:258139账户余额为:259109账户余额为:260140账户余额为:261110账户余额为:262141账户余额为:263111账户余额为:264142账户余额为:265112账户余额为:266143账户余额为:267113账户余额为:268144账户余额为:269145账户余额为:271114账户余额为:270146账户余额为:272115账户余额为:273147账户余额为:274116账户余额为:275148账户余额为:276117账户余额为:277149账户余额为:278118账户余额为:279150账户余额为:280151账户余额为:282152账户余额为:283153账户余额为:284154账户余额为:285155账户余额为:286156账户余额为:287157账户余额为:288158账户余额为:289159账户余额为:290160账户余额为:291119账户余额为:281161账户余额为:292162账户余额为:294163账户余额为:295164账户余额为:296120账户余额为:293165账户余额为:297121账户余额为:298166账户余额为:299122账户余额为:300167账户余额为:301123账户余额为:302168账户余额为:303169账户余额为:305170账户余额为:306171账户余额为:307172账户余额为:308173账户余额为:309124账户余额为:304174账户余额为:310125账户余额为:311175账户余额为:312126账户余额为:313176账户余额为:314127账户余额为:315177账户余额为:316178账户余额为:318179账户余额为:319180账户余额为:320181账户余额为:321182账户余额为:322183账户余额为:323184账户余额为:324185账户余额为:325128账户余额为:317186账户余额为:326187账户余额为:328129账户余额为:327188账户余额为:329130账户余额为:330189账户余额为:331131账户余额为:332190账户余额为:333191账户余额为:335192账户余额为:336193账户余额为:337194账户余额为:338195账户余额为:339196账户余额为:340197账户余额为:341132账户余额为:334198账户余额为:342133账户余额为:343199账户余额为:344134账户余额为:345135账户余额为:346136账户余额为:347137账户余额为:348138账户余额为:349139账户余额为:350140账户余额为:351141账户余额为:352142账户余额为:353143账户余额为:354144账户余额为:355145账户余额为:356146账户余额为:357147账户余额为:358148账户余额为:359149账户余额为:360150账户余额为:361151账户余额为:362152账户余额为:363153账户余额为:364154账户余额为:365155账户余额为:366156账户余额为:367157账户余额为:368158账户余额为:369159账户余额为:370160账户余额为:371161账户余额为:372162账户余额为:373163账户余额为:374164账户余额为:375165账户余额为:376166账户余额为:377167账户余额为:378168账户余额为:379169账户余额为:380170账户余额为:381171账户余额为:382172账户余额为:383173账户余额为:384174账户余额为:385175账户余额为:386176账户余额为:387177账户余额为:388178账户余额为:389179账户余额为:390180账户余额为:391181账户余额为:392182账户余额为:393183账户余额为:394184账户余额为:395185账户余额为:396186账户余额为:397187账户余额为:398188账户余额为:399189账户余额为:400190账户余额为:401191账户余额为:402192账户余额为:403193账户余额为:404194账户余额为:405195账户余额为:406196账户余额为:407197账户余额为:408198账户余额为:409199账户余额为:410 在用锁的情况下:我们看输出值0账户余额为:111账户余额为:122账户余额为:133账户余额为:144账户余额为:155账户余额为:166账户余额为:177账户余额为:188账户余额为:199账户余额为:2010账户余额为:2111账户余额为:2212账户余额为:2313账户余额为:2414账户余额为:2515账户余额为:2616账户余额为:2717账户余额为:2818账户余额为:2919账户余额为:3020账户余额为:3121账户余额为:3222账户余额为:3323账户余额为:3424账户余额为:3525账户余额为:3626账户余额为:3727账户余额为:3828账户余额为:3929账户余额为:4030账户余额为:4131账户余额为:4232账户余额为:4333账户余额为:4434账户余额为:4535账户余额为:4636账户余额为:4737账户余额为:4838账户余额为:4939账户余额为:5040账户余额为:5141账户余额为:5242账户余额为:5343账户余额为:5444账户余额为:5545账户余额为:5646账户余额为:5747账户余额为:5848账户余额为:5949账户余额为:6050账户余额为:6151账户余额为:6252账户余额为:6353账户余额为:6454账户余额为:6555账户余额为:6656账户余额为:6757账户余额为:6858账户余额为:6959账户余额为:7060账户余额为:7161账户余额为:7262账户余额为:7363账户余额为:7464账户余额为:7565账户余额为:7666账户余额为:7767账户余额为:7868账户余额为:7969账户余额为:8070账户余额为:8171账户余额为:8272账户余额为:8373账户余额为:8474账户余额为:8575账户余额为:8676账户余额为:8777账户余额为:8878账户余额为:8979账户余额为:9080账户余额为:9181账户余额为:9282账户余额为:9383账户余额为:9484账户余额为:9585账户余额为:9686账户余额为:9787账户余额为:9888账户余额为:9989账户余额为:10090账户余额为:10191账户余额为:10292账户余额为:10393账户余额为:10494账户余额为:10595账户余额为:10696账户余额为:10797账户余额为:10898账户余额为:10999账户余额为:110100账户余额为:111101账户余额为:112102账户余额为:113103账户余额为:114104账户余额为:115105账户余额为:116106账户余额为:117107账户余额为:118108账户余额为:119109账户余额为:120110账户余额为:121111账户余额为:122112账户余额为:123113账户余额为:124114账户余额为:125115账户余额为:126116账户余额为:127117账户余额为:128118账户余额为:129119账户余额为:130120账户余额为:131121账户余额为:132122账户余额为:133123账户余额为:134124账户余额为:135125账户余额为:136126账户余额为:137127账户余额为:138128账户余额为:139129账户余额为:140130账户余额为:141131账户余额为:142132账户余额为:1430账户余额为:1441账户余额为:146133账户余额为:1462账户余额为:147134账户余额为:1483账户余额为:149135账户余额为:1504账户余额为:151136账户余额为:1525账户余额为:153137账户余额为:1546账户余额为:155138账户余额为:1567账户余额为:157139账户余额为:1588账户余额为:159140账户余额为:1609账户余额为:161141账户余额为:16210账户余额为:163142账户余额为:16411账户余额为:165143账户余额为:16612账户余额为:167144账户余额为:16813账户余额为:169145账户余额为:17014账户余额为:171146账户余额为:172147账户余额为:174148账户余额为:175149账户余额为:176150账户余额为:177151账户余额为:178152账户余额为:179153账户余额为:180154账户余额为:181155账户余额为:182156账户余额为:183157账户余额为:184158账户余额为:185159账户余额为:186160账户余额为:187161账户余额为:188162账户余额为:189163账户余额为:190164账户余额为:191165账户余额为:192166账户余额为:193167账户余额为:194168账户余额为:195169账户余额为:196170账户余额为:197171账户余额为:198172账户余额为:199173账户余额为:200174账户余额为:201175账户余额为:202176账户余额为:203177账户余额为:204178账户余额为:205179账户余额为:206180账户余额为:207181账户余额为:208182账户余额为:209183账户余额为:210184账户余额为:211185账户余额为:212186账户余额为:213187账户余额为:214188账户余额为:215189账户余额为:216190账户余额为:217191账户余额为:218192账户余额为:219193账户余额为:220194账户余额为:221195账户余额为:222196账户余额为:223197账户余额为:224198账户余额为:225199账户余额为:22615账户余额为:17316账户余额为:22717账户余额为:22818账户余额为:22919账户余额为:23020账户余额为:23121账户余额为:23222账户余额为:23323账户余额为:23424账户余额为:23525账户余额为:23626账户余额为:23727账户余额为:23828账户余额为:23929账户余额为:24030账户余额为:24131账户余额为:24232账户余额为:24333账户余额为:24434账户余额为:24535账户余额为:24636账户余额为:24737账户余额为:24838账户余额为:24939账户余额为:25040账户余额为:25141账户余额为:25242账户余额为:25343账户余额为:25444账户余额为:25545账户余额为:25646账户余额为:25747账户余额为:25848账户余额为:25949账户余额为:26050账户余额为:26151账户余额为:26252账户余额为:26353账户余额为:26454账户余额为:26555账户余额为:26656账户余额为:26757账户余额为:26858账户余额为:26959账户余额为:27060账户余额为:27161账户余额为:27262账户余额为:27363账户余额为:27464账户余额为:27565账户余额为:27666账户余额为:27767账户余额为:27868账户余额为:27969账户余额为:28070账户余额为:28171账户余额为:28272账户余额为:28373账户余额为:28474账户余额为:28575账户余额为:28676账户余额为:28777账户余额为:28878账户余额为:28979账户余额为:29080账户余额为:29181账户余额为:29282账户余额为:29383账户余额为:29484账户余额为:29585账户余额为:29686账户余额为:29787账户余额为:29888账户余额为:29989账户余额为:30090账户余额为:30191账户余额为:30292账户余额为:30393账户余额为:30494账户余额为:30595账户余额为:30696账户余额为:30797账户余额为:30898账户余额为:30999账户余额为:310100账户余额为:311101账户余额为:312102账户余额为:313103账户余额为:314104账户余额为:315105账户余额为:316106账户余额为:317107账户余额为:318108账户余额为:319109账户余额为:320110账户余额为:321111账户余额为:322112账户余额为:323113账户余额为:324114账户余额为:325115账户余额为:326116账户余额为:327117账户余额为:328118账户余额为:329119账户余额为:330120账户余额为:331121账户余额为:332122账户余额为:333123账户余额为:334124账户余额为:335125账户余额为:336126账户余额为:337127账户余额为:338128账户余额为:339129账户余额为:340130账户余额为:341131账户余额为:342132账户余额为:343133账户余额为:344134账户余额为:345135账户余额为:346136账户余额为:347137账户余额为:348138账户余额为:349139账户余额为:350140账户余额为:351141账户余额为:352142账户余额为:353143账户余额为:354144账户余额为:355145账户余额为:356146账户余额为:357147账户余额为:358148账户余额为:359149账户余额为:360150账户余额为:361151账户余额为:362152账户余额为:363153账户余额为:364154账户余额为:365155账户余额为:366156账户余额为:367157账户余额为:368158账户余额为:369159账户余额为:370160账户余额为:371161账户余额为:372162账户余额为:373163账户余额为:374164账户余额为:375165账户余额为:376166账户余额为:377167账户余额为:378168账户余额为:379169账户余额为:380170账户余额为:381171账户余额为:382172账户余额为:383173账户余额为:384174账户余额为:385175账户余额为:386176账户余额为:387177账户余额为:388178账户余额为:389179账户余额为:390180账户余额为:391181账户余额为:392182账户余额为:393183账户余额为:394184账户余额为:395185账户余额为:396186账户余额为:397187账户余额为:398188账户余额为:399189账户余额为:400190账户余额为:401191账户余额为:402192账户余额为:403193账户余额为:404194账户余额为:405195账户余额为:406196账户余额为:407197账户余额为:408198账户余额为:409199账户余额为:410 结果很明显了,这就是同步的作用。
新闻热点
疑难解答