synchronize我的理解是为了保证程序中的原子性和一致性,即当你有两个线程同时操作一段代码的时候,要让这段代码的执行是在任何状态下都是正确的,首先要保证synchronize的使用要对同一个对象和同一把锁使用。 [java] view plain copy ...
synchronize我的理解是为了保证程序中的原子性和一致性,即当你有两个线程同时操作一段代码的时候,要让这段代码的执行是在任何状态下都是正确的,首先要保证synchronize的使用要对同一个对象和同一把锁使用。
[java] view plain copy
- <span style="font-size:14px;">public class TraditionalThreadSynchronized {
-
-
- public static void main(String[] args) {
- TraditionalThreadSynchronized test =new TraditionalThreadSynchronized();
- test.init();//创建同一个对象
- }
-
- private void init(){
- OutPuter outPuter =new OutPuter();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- while(true){
- Thread.sleep(10);
- outPuter.outer("abcdefg");
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }).start();//线程1
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- while(true){
- Thread.sleep(10);
- outPuter.outer("123456789");
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }).start();//线程2
- }
- class OutPuter {
- public synchronized void outer(String name) {
- for(int i = 0;i<name.length();i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
- }</span>
- <span style="font-size:14px;"> class OutPuter {
- public void outer(String name) {
- synchronized (name) {
- for(int i = 0;i<name.length();i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
- }</span>
- <span style="font-size:14px;">class OutPuter {
- public void outer(String name) {
- synchronized (this) {//或者创建一个新的锁把,this换成锁也可以,此处的this指的是outer这个对象
- for(int i = 0;i<name.length();i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
- }</span>
- class OutPuter {
- public synchronized void outer(String name) {
- for(int i = 0;i<name.length();i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
- class OutPuter {
- public void outer(String name) {
- synchronized (this) {
- for(int i = 0;i<name.length();i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
- public synchronized void outer2(String name) {
- for(int i = 0;i<name.length();i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- span style="font-size:14px;"> }</span>
- public static synchronized void outer3(String name) {
- for(int i = 0;i<name.length();i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- span style="font-size:14px;"> }</span>
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:java多线程中synchronize锁的使用和学习,Thread多线程学习(二)
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。