精华内容
下载资源
问答
  • volatile关键字主要作用与使用1.作用1未使用volatile关键字执行结果修改变量flag的关键字volatile执行结果2分析java内存模型 1.作用 实现线程本地内存与主内存之间的数据更新,实现各线程本地内存的数据操作,可以向...

    1.作用

    实现线程本地内存与主内存之间的数据更新,实现各线程本地内存的数据操作,可以向主内存中数据一样可以共享。

    1未使用volatile关键字

    package ThreadVolatile;
    
    import com.sun.jna.platform.win32.FlagEnum;
    import com.zx.threadlock.threadDemo;
    
    public class VolatileDemo {
    	public static void main(String[] args) throws InterruptedException {
    		Thread1 t1 = new Thread1();
    		t1.start();
    		Thread.sleep(300);
    		t1.isRun(false);
    	}
    }
    
    class Thread1 extends Thread{
    	public boolean flag = true;
    	@Override
    	public void run() {
    		System.out.println("子线程开始执行");
    		while(flag) {
    			
    		}
    		System.out.println("子线程结束执行");
    	}
    	
    	public void isRun(boolean flag) {
    		this.flag = flag;
    	}
    }
    

    执行结果

    线程一直执行
    线程持续执行,未能结束。isRun方法未能将flag设置为的false的状态共享,主线程未能获得变化,所以一直以true执行,出现线程安全问题。

    修改变量flag的关键字volatile

    class Thread1 extends Thread{
    	public volatile boolean flag = true;
    	@Override
    	public void run() {
    		System.out.println("子线程开始执行");
    		while(flag) {
    			
    		}
    		System.out.println("子线程结束执行");
    	}
    	
    	public void isRun(boolean flag) {
    		this.flag = flag;
    	}
    }
    

    执行结果

    在这里插入图片描述
    子线程成功结束

    2分析

    java内存模型

    在这里插入图片描述
    因为线程之间开始默认为不可见的,所以在线程t1调用isRun方法,将flag设置为false时,主线程没有获取到更新,从而使得主线程一直以flag为true执行,使得子线程无法关闭,在使用volatile关键字后,flag为可见,主内存可以获得子线程中本地内存对flag数据的操作结果。

    volatile非原子性

    线程三大大特性之一的是原子性,为保证数据的一致性来确保线程安全。volatile主要作用为更新本地内存中的数据,并不会保证操作的原子性。volatile非原子性

    展开全文
  • JAVA关键字作用详解

    2020-08-31 06:29:14
    本文主要介绍了Java关键字作用,具有很好的参考价值,下面跟着小编一起来看下吧
  • volatile关键字作用

    2019-03-04 12:33:29
    1、volatile关键字主要用在多线程中,用来修饰变量,保证其在多线程中的可见性,每次读到volatile变量,一定是最新的数据。 2、volatile关键字能禁止指令重排序,volatile不能保证之前访问语句的执行顺序,也不能...

    volatile关键字的作用:

    1、volatile关键字主要用在多线程中,用来修饰变量,保证其在多线程中的可见性,每次读到volatile变量,一定是最新的数据。

    2、volatile关键字能禁止指令重排序,volatile不能保证之前访问语句的执行顺序,也不能保证之后的访问语句的执行顺序,它只能保证在它执行时,它前面访问语句执行完毕,且结果对它和之后的语句是可见性的

    展开全文
  • 主要介绍了C#中partial关键字作用详解,包括局部类型概念和注意点介绍,非常不错,具有参考借鉴价值,需要的的朋友参考下
  • this关键字作用

    2018-11-04 23:53:50
    this关键字主要有以下三种用途 this调用本类属性 this调用本类方法 this表示当前对象 1. this调用本类属性 我们可以看如下代码: public class Person { private String name; private int age; public ...

    this关键字的作用

    this关键字主要有以下三种用途
    1. this调用本类属性
    2. this调用本类方法
    3. this表示当前对象

    1. this调用本类属性

    我们可以看如下代码:

    public class Person {
    	private String name;
    	private int age;
    	
    	public Person(String name, int age)
    	{
    		name = name;
    		age = age;
    	}
    	
    	public void printInfo()
    	{
    		System.out.println("name: " + name + " age: " + age);
    	}
    }
    

    我们发现参数与类中属性重名的时候,类中属性无法正常赋值。这个时候我们加上this关键字就可以解决这个问题。所以,java中访问累的属性,一定要加上this关键字。

    public Person(String name, int age)
    	{
    		this.name = name;
    		this.age = age;
    	}
    

    2. this调用本类方法

    • 调用普通方法
    public class Person {
    	private String name;
    	private int age;
    	
    	public Person(String name, int age)
    	{
    		this.name = name;
    		this.age = age;
    		this.printSth();
    	}
    	
    	public void printSth()
    	{
    		System.out.println("************************");
    	}
    }
    

    在继承中,强烈建议调用类的方法时加上this, 虽然也可以不加,但是在涉及到继承的时候有用。

    • this在构造函数中的使用

    观察下面的代码

    public class Person {
    	private String name;
    	private int age;
    	
    	public Person()  //无参构造函数
    	{
    		System.out.println("new了一个新对象");
    	}
    	
    	public Person(String name)
    	{
    		System.out.println("new了一个新对象");
    		this.name = name;
    	}
    	
    	public Person(String name, int age)
    	{
    		System.out.println("new了一个新对象");
    		this.name = name;
    		this.age = age;
    	}
        
        public void printInfo()
    	{
    		System.out.println("name: " + name + " age: " + age);
    	}
    }
    
    
    public class TestMain {
    
    	public static void main(String[] args) {
    		Person per1 = new Person();
    		Person per2 = new Person("kaikai");
    		Person per3 = new Person("kaikai", 23);
    		per1.printInfo();
    		per2.printInfo();
    		per3.printInfo();
    	}
    }
    

    java,支持构造方法相互调用。但是使用时要注意以下两点。

    1. this调用构造方法的语句必须在构造方法首行。
    2. 使用this调用构造方法,一定要注意留出口,不要陷入死循环。
    public Person()
    	{
    		System.out.println("new了一个新对象");
    	}
    	
    	public Person(String name)
    	{
    		this();
    		this.name = name;
    	}
    	
    	public Person(String name, int age)
    	{
    		this(name);
    		this.age = age;
    	}
    

    使用this表示当前对象。

    class Person
    {
    	public void printSth()
    	{
    		System.out.println("Print方法:" + this);
    	}
    }
    
    public class TestMain {
    
    	public static void main(String[] args) {
    		Person per1 = new Person();
    		System.out.println("Main方法:" + per1);
    		per1.printSth();
    		Person per2 = new Person();
    		System.out.println("Main方法:" + per2);
    		per2.printSth();
    	}
    }
    
    

    我们发现,一个对象调用本类的方法,那类里的this就表示调用方法的对象。

    如上,万事如意。

    展开全文
  • 主要介绍了Java中static关键字作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了Java并发编程volatile关键字作用,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • Java中static关键字作用

    万次阅读 多人点赞 2015-03-29 08:45:56
    Java中static关键字作用

    static关键字主要有两种作用:

    第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。

    第二,实现某个方法或属性与类而不是对象关联在一起

    具体而言,在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类

    (1)static成员变量:

    Java类提供了两种类型的变量:用static关键字修饰的静态变量和不用static关键字修饰的实例变量。静态变量属于类,在内存中只有一个复制,只要静态变量所在的类被加载,这个静态变量就会被分配空间,因此就可以被使用了。对静态变量的引用有两种方式,分别是“类.静态变量"和”对象.静态变量"

    实例变量属于对象,只有对象被创建后,实例变量才会被分配内存空间,才能被使用,它在内存中存在多个复制,只有用“对象.实例变量”的方式来引用。


    (2)static成员方法:

    Java中提供了static方法和非static方法。static方法是类的方法,不需要创建对象就可以被调用,而非static方法是对象的方法,只有对象被创建出来后才可以被使用

    static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法,因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。同理,static方法也不能访问非static类型的变量。

    单例设计模式:

    static一个很重要的用途就是实现单例设计模式。单利模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static,程序实例如下:

    class Singleton{
    	private static Singleton instance=null;
    	private Singleton(){}
    	public static Singleton getInstance(){
    		if(instance==null){
    			instance=new Singleton();
    		}
    		return instance;
    	}
    }
    

    (3)static代码块
    static代码块在类中是独立于成员变量和成员函数的代码块的。注意:这些static代码块只会被执行一次

    (4)static与final结合使用表示的意思:
    对于变量,若使用static  final修饰,表示一旦赋值不能修改,并且通过类名可以访问。
    对于方法,若使用static final修饰,表示该方法不可被覆盖,并且可以通过类名直接访问。

    public class Test{
    	public static int testStatic(){
    		static final int i=0;
    		System.out.println(i++);
    		
    	}
    	public static void main(String[] args){
    		Test test=new Test();
    		test.testStatic();
    	}
    }
    上述程序运行的结果:
    A   0      B   1  C    2     D  编译失败

    答案:D
    在Java语言中,不能在成员函数内部定义static变量



    展开全文
  • volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。这篇文章主要介绍了Java中volatile关键字作用与用法详解的相关资料,需要的朋友可以参考下
  • Java关键字及其作用详解

    万次阅读 多人点赞 2019-04-07 18:52:36
    Java中的关键字有如下表格中这么多 下面分别解释一下每个关键字的含义。 private 一种访问控制方式:私用模式 protected 一种访问控制方式:保护模式 public 一种访问控制方式:共用模式 ...
  • 所谓关键字的话,java中保留的并不多,native是一个本地关键字,看完这篇文章,就知道它主要用来做什么的了。 初次见面 有人初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native ...
  • 本文主要介绍js中call与apply关键字作用以及它们的用法,具体实例如下,希望对大家有所帮助
  • static 关键字作用

    2018-11-28 16:04:27
    java中的static关键字主要用于内存管理。我们可以应用java static关键字在变量,方法,块和嵌套类中。 static关键字属于类,而不是类的实例。 static关键字可以修饰 变量 如果将一个变量声明为static,它就是所谓的...
  • Java中this关键字作用和用法

    万次阅读 多人点赞 2018-09-03 19:22:39
    写在前面 简单总结一下Java中this关键字的作用与用法。...this关键字主要有三个应用: this调用本类中的属性,也就是类中的成员变量; this调用本类中的其他方法; this调用本类中的其他构造...
  • static关键字主要有两种作用: 第一,为特定数据类型或对象分配单一的存贮空间,而与创建对象的个数无关。第二,希望某个方法或属性与类而不是对象关联在一起,也就是说, 在不创建对象的情况下就可以通过类来直接...
  • 主要介绍了c++中的 static 关键字,在我们日常使用过程中,static通常有两个作用,具体内容在文中给大家详细介绍,需要的朋友可以参考下
  • sealed关键字作用

    2017-12-04 23:02:00
    sealed关键字作用: 在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。 sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于...
  • php5新增了一个 instanceof 关键字,该关键字主要有以下作用: 判断某个对象是否是某个类的一个实例,包括继承过来的父类。 判断某个对象是否实现了某个接口 ...
  • C语言关键字static作用

    2019-05-04 05:55:34
    c语言中的关键字static,我在程序中经常用到,它对于数据本地化,限定代码范围有着重要作用
  • extern 关键字作用

    2019-08-08 12:33:44
    主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参...
  • this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量; (2)this调用本类中的其他方法; (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。 应用一:引用成员变量 Public Class...
  • volatile关键字及其作用

    万次阅读 多人点赞 2017-03-24 16:37:42
    概述:本文主要介绍Java语言中的volatile关键字,内容涵盖volatile的保证内存可见性、禁止指令重排等。
  • 写在前面 简单总结一下Java中this关键字的作用与用法。 参考文献: Java中this关键字详解Java this 关键字用法java中this关键字的用法Java this关键字java中this关键字的...this关键字主要有三个应用: this调用...
  • C++关键字作用

    2019-02-27 17:34:33
    static关键字至少有下列5个作用: (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)限制变量的作用域,...
  • 一、this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量; (2)this调用本类中的其他方法; (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。 Public Class Student { ...
  • 主要介绍了从内存地址解析Java的static关键字作用,包括静态成员变量和静态方法等重要内容,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 323,885
精华内容 129,554
关键字:

关键字的主要作用