糖果派对官方网站_可以赌钱的糖果游戏_手机版
bb电子糖果派对:Java线程连串实用教程

bb电子糖果派对:Java线程连串实用教程

作者:网络编程    来源:未知    发布时间:2019-12-23 19:47    浏览量:

代码如下

Java线程是一个宏大的话题,本专项论题的七十多篇小说,将Java八线程的全体讲了一次,对博主来讲是三个学学和增进的长河,也为Java线程种类的学人带给了方便。

synchronized是Java中的关键字,是大器晚成种同步锁。它平日常有以下二种用法:

DWORDWINAPIGetFileNameThread(PVOIDlpParameter){PNM_INFONmInfo=lpParameter;IO_STATUS_BLOCKIoStatus;NtQueryInformationFile(NmInfo-hFile,IoStatus,NmInfo-Info,sizeof(NM_INFO)-sizeof(HANDLE),FileNameInformation);return0;}EXTERN_CvoidGetFileName(HANDLEhFile,PCHARTheName){HANDLEhThread;PNM_INFOInfo=HeapAlloc(hHeap,0,sizeof(NM_INFO));Info-hFile=hFile;hThread=CreateThread(NULL,0,GetFileNameThread,Info,0,NULL);if(MsgWaitForMultipleObjects(1,hThread,FALSE,INFINITE,QS_ALLINPUT)==WAIT_OBJECT_0)//问题出在这里{TerminateThread(hThread,0);}CloseHandle(hThread);memset(TheName,0,MAX_PATH);WideCharToMultiByte(CP_ACP,0,Info-Info.FileName,Info-Info.FileNameLength1,TheName,MAX_PATH,NULL,NULL);HeapFree(hHeap,0,Info);}

 

  • 修饰叁个代码块,被修饰的代码块称为同步语句块,其职能的限量是大括号{}括起来的代码。修饰代码块所用到的锁又含有以下三种:

其意气风发进度和线程创立,前九贰十二个线程都没难点,但从今以后在waitforsingleobject时子线程就崩溃了,主线程死锁了。求解答!

·Java线程:大总结

  1. synchronized (this) {...},使用this,作为锁。
  2. synchronized (obj卡塔尔(قطر‎ {...},使用贰个实例化对象作为锁。
  3. synchronized (xxx.class卡塔尔国 {...},使用二个class作为锁。

20750 / 23

  • 修饰三个措施,被修饰的点子称为同步方法,其效果的界定是一切艺术。
  • 改良五个静态的措施,其效用的范围是成套静态方法。

Java 线程 休闲 职场 大总结

经过上边那篇笔记,大家得以学会synchronized 的两种选拔方法,以至它们中间的界别。

bb电子糖果派对,leizhimin

1、synchronized修饰一个代码块

synchronized修饰三个代码块,被修饰的代码块称为同步语句块,其固守的界定是大括号{}括起来的代码。

2009/11/5

1.1、synchronized(this卡塔尔(قطر‎{...}修饰代码块

下边看生龙活虎段使用synchronized(this卡塔尔国的代码:

    /**
     * synchronized修饰一个代码块:指定锁为this。
     * 结果:
     * 1、被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
     * 2、不同的对象,调用这个方法,不会锁住;
     * 3、没有被大括号{}括起来的代码,并不会被锁住。
     */
    public void synchronizedPart1() {
        Log.i("haha", Thread.currentThread().getName() + "线程,非synchronized部分。");
        synchronized (this) {
            for (int i = 0; i < 5; i++) {
                SystemClock.sleep(100);
                Log.i("haha", Thread.currentThread().getName() + "线程,结果:" + i);
            }
        }
    }
  • 测量检验1:实例化四个TestSynchronized对象,使用多个线程调用同四个对象的synchronizedPart1( 卡塔尔(قطر‎方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart1();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart1();
            }
        });

        thread1.start();
        thread2.start();

奉行结果:
Thread-2700线程,非synchronized部分。
Thread-2701线程,非synchronized部分。
Thread-2700线程,结果:0
Thread-2700线程,结果:1
Thread-2700线程,结果:2
Thread-2700线程,结果:3
Thread-2700线程,结果:4
Thread-2701线程,结果:0
Thread-2701线程,结果:1
Thread-2701线程,结果:2
Thread-2701线程,结果:3
Thread-2701线程,结果:4

  • 测量试验2:实例化多个TestSynchronized对象,使用多个线程分别调用那三个对象的synchronizedPart1( 卡塔尔方法:
    final TestSynchronized testSynchronized1 = new TestSynchronized();
        final TestSynchronized testSynchronized2 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart1();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized2.synchronizedPart1();
            }
        });

        thread1.start();
        thread2.start();

实施结果:
Thread-2764线程,非synchronized部分。
Thread-2765线程,非synchronized部分。
Thread-2764线程,结果:0
Thread-2765线程,结果:0
Thread-2765线程,结果:1
Thread-2764线程,结果:1
Thread-2765线程,结果:2
Thread-2764线程,结果:2
Thread-2765线程,结果:3
Thread-2764线程,结果:3
Thread-2765线程,结果:4
Thread-2764线程,结果:4

·Java线程:概念与原理

1.2、synchronized(obj卡塔尔(英语:State of Qatar){...}修饰代码块

点名有个别实例化对象作为synchronized的锁,上边是接纳贰个实例化对象作为锁的demo:
表明:零长度的byte数组对象创造起来将比别的对象都划算,查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object(卡塔尔(英语:State of Qatar)则要求7行操作码。

    //作为锁
    private byte[] lock = new byte[0];
    /**
     * synchronized修饰一个代码块:指定锁为某个对象。
     * 结果:
     * 1、其作用的范围是大括号{}括起来的代码,作用的对象是调用这个类的对所有对象;
     * 2、如果指定为锁的对象是同一个,则会被锁住;如果指定为锁的不是同一个对象,则不会被锁住。
     * 3、没有被大括号{}括起来的代码,并不会被锁住。
     */
    public void synchronizedPart2() {
        Log.i("haha", Thread.currentThread().getName() + "线程,非synchronized部分。");
        //锁为obj
        synchronized (lock) {
            for (int i = 0; i < 5; i++) {
                SystemClock.sleep(100);
                Log.i("haha", Thread.currentThread().getName() + "线程,结果:" + i);
            }
        }
    }
  • 测量试验1:实例化一个TestSynchronized对象,使用八个线程调用同三个指标的synchronizedPart2( 卡塔尔(英语:State of Qatar)方法:
    final TestSynchronized testSynchronized1 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart2();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart2();
            }
        });

        thread1.start();
        thread2.start();

实施结果:
Thread-2824线程,非synchronized部分。
Thread-2825线程,非synchronized部分。
Thread-2824线程,结果:0
Thread-2824线程,结果:1
Thread-2824线程,结果:2
Thread-2824线程,结果:3
Thread-2824线程,结果:4
Thread-2825线程,结果:0
Thread-2825线程,结果:1
Thread-2825线程,结果:2
Thread-2825线程,结果:3
Thread-2825线程,结果:4

  • 测验2:实例化八个TestSynchronized对象,使用七个线程分别调用那多个指标的synchronizedPart2( 卡塔尔国方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();
        final TestSynchronized testSynchronized2 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart2();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized2.synchronizedPart2();
            }
        });

        thread1.start();
        thread2.start();

履行结果:
Thread-2864线程,非synchronized部分。
Thread-2865线程,非synchronized部分。
Thread-2864线程,结果:0
Thread-2865线程,结果:0
Thread-2864线程,结果:1
Thread-2865线程,结果:1
Thread-2864线程,结果:2
Thread-2865线程,结果:2
Thread-2864线程,结果:3
Thread-2865线程,结果:3
Thread-2864线程,结果:4
Thread-2865线程,结果:4

78977 / 5

1.3、synchronized(xxx.class卡塔尔(英语:State of Qatar){...}修饰代码块

内定某些类的.class作为锁,上边是壹个demo:

    /**
     * synchronized修饰一个代码块:指定锁为某个类。
     * 结果:
     * 1、其作用的范围是大括号{}括起来的代码,作用的对象是调用这个类的对所有对象;
     * 2、不同的对象,调用这个方法,也会锁住。
     * 3、没有被大括号{}括起来的代码,并不会被锁住。
     */
    public void synchronizedPart3() {
        Log.i("haha", Thread.currentThread().getName() + "线程,非synchronized部分。");
        synchronized (MainActivity.class) {
            for (int i = 0; i < 5; i++) {
                SystemClock.sleep(100);
                Log.i("haha", Thread.currentThread().getName() + "线程,结果:" + i);
            }
        }
    }
  • 测量试验1:实例化四个TestSynchronized对象,使用多少个线程调用同一个目的的synchronizedPart3( 卡塔尔国方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart3();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart3();
            }
        });

        thread1.start();
        thread2.start();

推行结果:
Thread-2892线程,非synchronized部分。
Thread-2893线程,非synchronized部分。
Thread-2892线程,结果:0
Thread-2892线程,结果:1
Thread-2892线程,结果:2
Thread-2892线程,结果:3
Thread-2892线程,结果:4
Thread-2893线程,结果:0
Thread-2893线程,结果:1
Thread-2893线程,结果:2
Thread-2893线程,结果:3
Thread-2893线程,结果:4

  • 测量检验2:实例化多个TestSynchronized对象,使用三个线程分别调用那五个对象的synchronizedPart3( 卡塔尔(قطر‎方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();
        final TestSynchronized testSynchronized2 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedPart3();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized2.synchronizedPart3();
            }
        });

        thread1.start();
        thread2.start();

实施结果:
Thread-2956线程,非synchronized部分。
Thread-2957线程,非synchronized部分。
Thread-2956线程,结果:0
Thread-2956线程,结果:1
Thread-2956线程,结果:2
Thread-2956线程,结果:3
Thread-2956线程,结果:4
Thread-2957线程,结果:0
Thread-2957线程,结果:1
Thread-2957线程,结果:2
Thread-2957线程,结果:3
Thread-2957线程,结果:4

线程 休闲 职场

synchronized修饰八个办法

synchronized修饰方法和修饰叁个代码块相同,只是功能范围不符合,修饰代码块是大括号括起来的限量,而修饰方法范围是总体函数。
上面是接收synchronized修饰方法的叁个demo:

    /**
     * synchronized修饰一个方法。
     * 结果:
     * 1、被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
     * 2、不同的对象,调用这个方法,不会锁住。
     */
    public synchronized void synchronizedMethod() {
        for (int i = 0; i < 5; i++) {
            SystemClock.sleep(100);
            Log.i("haha", Thread.currentThread().getName() + "线程,结果:" + i);
        }
    }
  • 测验1:实例化三个TestSynchronized对象,使用四个线程调用同多少个对象的synchronizedMethod( 卡塔尔(英语:State of Qatar)方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedMethod();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedMethod();
            }
        });

        thread1.start();
        thread2.start();

实施结果:
Thread-3024线程,结果:0
Thread-3024线程,结果:1
Thread-3024线程,结果:2
Thread-3024线程,结果:3
Thread-3024线程,结果:4
Thread-3025线程,结果:0
Thread-3025线程,结果:1
Thread-3025线程,结果:2
Thread-3025线程,结果:3
Thread-3025线程,结果:4

  • 测量试验2:实例化四个TestSynchronized对象,使用三个线程分别调用那三个对象的synchronizedMethod( 卡塔尔(قطر‎方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();
        final TestSynchronized testSynchronized2 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedMethod();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized2.synchronizedMethod();
            }
        });

        thread1.start();
        thread2.start();

实行结果:
Thread-3072线程,结果:0
Thread-3073线程,结果:0
Thread-3072线程,结果:1
Thread-3073线程,结果:1
Thread-3072线程,结果:2
Thread-3073线程,结果:2
Thread-3072线程,结果:3
Thread-3073线程,结果:3
Thread-3072线程,结果:4
Thread-3073线程,结果:4

leizhimin

synchronized修饰一个静态方法

上边包车型大巴demo是接收synchronized来修饰一个静态方法:

    /**
     * synchronized修饰一个静态方法。
     * 结果:
     * 1、其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
     * 2、不同的对象,调用这个方法,也会锁住。
     */
    public synchronized static void synchronizedStaticMethod() {
        for (int i = 0; i < 5; i++) {
            SystemClock.sleep(100);
            Log.i("haha", Thread.currentThread().getName() + "线程,结果:" + i);
        }
    }
  • 测量检验1:实例化一个TestSynchronized对象,使用多个线程调用同三个指标的synchronizedStaticMethod( 卡塔尔(قطر‎方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedStaticMethod();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedStaticMethod();
            }
        });

        thread1.start();
        thread2.start();

奉行结果:
Thread-3084线程,结果:0
Thread-3084线程,结果:1
Thread-3084线程,结果:2
Thread-3084线程,结果:3
Thread-3084线程,结果:4
Thread-3085线程,结果:0
Thread-3085线程,结果:1
Thread-3085线程,结果:2
Thread-3085线程,结果:3
Thread-3085线程,结果:4

  • 测量检验2:实例化多个TestSynchronized对象,使用两个线程分别调用那五个对象的synchronizedStaticMethod( )方法:
        final TestSynchronized testSynchronized1 = new TestSynchronized();
        final TestSynchronized testSynchronized2 = new TestSynchronized();

        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized1.synchronizedStaticMethod();
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                testSynchronized2.synchronizedStaticMethod();
            }
        });

        thread1.start();
        thread2.start();

实施结果:
Thread-3088线程,结果:0
Thread-3088线程,结果:1
Thread-3088线程,结果:2
Thread-3088线程,结果:3
Thread-3088线程,结果:4
Thread-3089线程,结果:0
Thread-3089线程,结果:1
Thread-3089线程,结果:2
Thread-3089线程,结果:3
Thread-3089线程,结果:4

2008/9/13

总结

  1. synchronized修饰代码块和修饰方法的界别:
  • 修饰代码块功效的节制是大括号{}括起来的代码;
  • 修饰方法效果的界定是任何函数。
  1. synchronized修饰代码块的时候,synchronized(this卡塔尔(قطر‎、synchronized(obj卡塔尔国、synchronized(xxx.class卡塔尔(英语:State of Qatar)的相符点:
  • 其职能的节制是大括号{}括起来的代码;
  • 从未有过被大括号{}括起来的代码,并不会被锁住。
  1. synchronized修饰代码块的时候,synchronized(this卡塔尔(英语:State of Qatar)、synchronized(obj卡塔尔(英语:State of Qatar)、synchronized(xxx.class卡塔尔有什么不相同:
  • synchronized(this卡塔尔(英语:State of Qatar)钦命的锁是近来类的实例化对象。同一个实例化对象,调用同步代码块的时候,会被锁住;差别实例化对象,调用同步代码块的时候,不会被锁住。
  • synchronized(obj卡塔尔国钦点的锁是钦定的某部实例化对象。只要锁相近,哪怕是见仁见智的实例化对象,调用同步代码块的时候,也会被锁住。
  • synchronized(xxx.class卡塔尔(英语:State of Qatar)钦命的锁是xxx.class。不论对象相分化等,只要调用这些合伙代码块,就能被锁住。
  1. synchronized修饰方法,它的锁是何许?
  • synchronized修饰方法的时候,它的锁是其风流浪漫合伙方法所在的指标的实例化。
  • synchronized修饰方法的时候,同多少个实例化对象,调用同步方法的时候,会被锁住;不一样指标调用同步方法的时候,不会被锁住。
  1. synchronized修饰一个静态方法和修饰方法有何不一样?
  • synchronized修饰贰个静态方法,成效范围的是静态方法所属类的富有指标。
  • synchronized修饰二个主意,效率范围是以此主意所属对象的实例化。

·Java线程:新特征-障碍器

10367 / 2

线程 职场 休闲 障碍器

leizhimin

2009/11/5

·Java线程:线程的调整-归总

15093 / 19

线程 合并 休闲 职场

leizhimin

2009/11/4

·Java线程:线程的调解-守护线程

18626 / 7

线程 守护线程 休闲 职场

leizhimin

2009/11/4

·Java线程:线程的一块儿-同步方法

20526 / 5

线程 同步 休闲 职场

leizhimin

2009/11/4

·Java线程:线程的叁只-同步块

19290 / 6

线程 同步 休闲 职场

leizhimin

2009/11/4

·Java线程:并发合营-临盆者消费者模型

20549 / 17

消费者 生产者 休闲 职场

leizhimin

2009/11/4

·Java线程:并发合营-死锁

13689 / 6

线程 职场 休闲 死锁

leizhimin

2009/11/4

·Java线程:volatile关键字

21160 / 7

volatile 职场 线程 休闲

leizhimin

2009/11/4

·Java线程:新特征-线程池

25269 / 2

上一篇:没有了
下一篇:没有了
友情链接: 网站地图
Copyright © 2015-2019 http://www.tk-web.com. bb电子糖果派对有限公司 版权所有