Maison 类库下载 java类库 【Effective Java】同步访问共享的可变数据

【Effective Java】同步访问共享的可变数据

Oct 10, 2016 am 08:57 AM

这段时间看的部分感觉没啥需要记录下来的,个人也没什么想法,不过以后还是要多记,多写

package cn.xf.cp.ch02.item66;

import java.util.concurrent.TimeUnit;

import org.junit.Test;

public class StopThread
{
    /**
     * 停止线程变量
     */
    private static boolean stopRequested;
    
    //吧对变量的读和写方法都进行同步
    private static synchronized void requestStop()
    {
        stopRequested = true;
    }
    
    private static synchronized boolean stopRequested()
    {
        return stopRequested;
    }
    
    /**
     * 停止线程变量,这个使用关键字volatile使每个线程都是获取到最新的值
     */
    private static volatile boolean stopRequested2;
    
    @Test
    public void test()
    {
        Thread backgroundThread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                int i = 0;
                while(!stopRequested())
                {
                    ++i;
                }
            }
        });
        //启动线程
        backgroundThread.start();
        
        //休眠1秒
        try
        {
            TimeUnit.SECONDS.sleep(1);
        }
        catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        requestStop();
    }
    
    @Test
    public void test2()
    {
        Thread backgroundThread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                int i = 0;
                System.out.println("这里使用最新的stopRequested2值");
                while(!stopRequested2)
                {
                    ++i;
                }
            }
        });
        
        //启动线程
        backgroundThread.start();
        
        //停下1s之后执行变量修改程序
        try
        {
            TimeUnit.SECONDS.sleep(1);
        }
        catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //修改变量
        stopRequested2 = true;
    }
    
    
    public static void main(String[] args) throws InterruptedException
    {
        Thread backgroundThread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                int i = 0;
                System.out.println(stopRequested); //false
                //这里停不下来是因为主线程对stopRequest进行修改的时候,这个线程并不可见
                while(!stopRequested)
                {
                    ++i;
                }
            }
        });
        //启动线程
        backgroundThread.start();
        
        //休眠1秒
        TimeUnit.SECONDS.sleep(1);
        stopRequested = true;
    }
}
Copier après la connexion

这个main方法是永远不停的,其余两个从两个不同的角度给出了同步的方法

 

总之:当多个线程共享可变数据的时候,每个读或者写数据的线程都必须执行同步。


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)