实例变量与线程安全:

不共享数据:

public class NoSharedThread extends Thread {
private int count = 5; public NoSharedThread(String name){
super();
this.setName(name);
} @Override
public void run() {
super.run();
while (count > 0){
count--;
System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);
}
}
} public class ThreadRunMain {
public static void main(String[] args) {
testSharedSafeThead();
} public static void testNoSharedThread() {
NoSharedThread a = new NoSharedThread("a");
NoSharedThread b = new NoSharedThread("b");
NoSharedThread c = new NoSharedThread("c");
a.start();
b.start();
c.start();
} }

运行结果:

可见线程之间没有互相干扰,都在操作自己的count变量。

共享数据:

public class SharedThread extends Thread{
private int count = 5;
public SharedThread(String name) {
super();
this.setName(name);
} @Override
public void run() {
super.run();
count--;
System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);
}
} public class ThreadRunMain {
public static void main(String[] args) {
testSharedThead(); } public static void testSharedThead(){
SharedThread st = new SharedThread("SharedThread");
Thread a = new Thread(st,"a");
Thread b = new Thread(st,"b");
Thread c = new Thread(st,"c");
Thread d = new Thread(st,"d");
Thread e = new Thread(st,"e");
a.start();
b.start();
c.start();
d.start();
e.start(); } }

运行结果:

可见线程之间互相干扰,产生count值一样的情况,非线程安全的问题出现。

共享数据线程安全:

public class SharedSafeThread extends Thread{
private int count = 5;
public SharedSafeThread(String name) {
super();
this.setName(name);
} @Override
public synchronized void run() {
super.run();
count--;
System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);
} } public class ThreadRunMain {
public static void main(String[] args) {
testSharedSafeThead();
} public static void testSharedSafeThead(){
SharedSafeThread sst = new SharedSafeThread("SharedSafeThread");
Thread a = new Thread(sst,"a");
Thread b = new Thread(sst,"b");
Thread c = new Thread(sst,"c");
Thread d = new Thread(sst,"d");
Thread e = new Thread(sst,"e");
a.start();
b.start();
c.start();
d.start();
e.start(); } }

运行结果:

可见线程之间没有互相干扰,count值没有重复,线程安全。

Java 学习笔记之 实例变量与线程安全的更多相关文章

  1. Java 学习笔记之 实例变量非线程安全

    实例变量非线程安全: 如果多个线程共同访问1个对象中的实例变量,则可能出现“非线程安全”问题. public class UnSafeHasSelfPrivateNum { private int n ...

  2. java学习笔记(基础篇)—变量与表达式

    一:局部变量和实例变量 定义变量是指设定变量的数据类型和变量的名字,Java语言要求变量遵循先定义,再初始化,然后使用的规则. 作用域:指它的存在范围,只有在这个范围内,程序代码才能访问它. 变量的生 ...

  3. Java学习笔记9---类静态成员变量的存储位置及JVM的内存划分

    笔记8提到了类静态成员变量的访问方式,但静态成员变量存储在哪里呢?在网上查阅不少资料,发现好多内容都是过时的了,其中主流观点是静态成员变量存放在方法区.JDK8之前,静态成员变量确实存放在方法区:但J ...

  4. java学习笔记----数据类型,变量,常量

    一.数据类型 1.基本类型(8种,又称内置数据类型).6种数字类型(byte,short,int,long,float,double),一种字符型(char),一种布尔类型(boolean). byt ...

  5. Java学习笔记3、变量、数据类型

    标识符 常见的命名规则(见名知意) 包名全部小写 类或者接口,一个单词:首字母大写,多个单词:每个单词首字母大写. 方法或者变量:一个单词:首字母小写,多个单词:从第二个单词开始,每个单词首字母大写. ...

  6. Java 学习笔记之 异常法停止线程

    异常法停止线程: public class RealInterruptThread extends Thread { @Override public void run() { try { for ( ...

  7. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  8. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

随机推荐

  1. 洛谷-P1414 又是毕业季II -枚举因子

    P1414 又是毕业季II:https://www.luogu.org/problemnew/show/P1414 题意: 给定一个长度为n的数列.要求输出n个数字,每个数字代表从给定数列中最合理地取 ...

  2. Ada and Coins

    Ada and Coins 题意:钱包里有n种钱,然后有m次询问,询问[l,r]区间内能被表示的个数有几个. 题解:这道题是群主推荐我写的,然后让我用bitset去写,他说 操作32个bitset需要 ...

  3. JOBDU 1199 找位置

    题目1199:找位置 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2645 解决:1286 题目描述: 对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 ...

  4. Patch

    http://www.cnblogs.com/cute/archive/2011/04/29/2033011.html zhezhelin diff和patch使用指南 diff和patch是一对工具 ...

  5. Wannafly挑战赛16---A 取石子

    链接:https://www.nowcoder.com/acm/contest/113/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言52428 ...

  6. 【Offer】[67] 【把字符串转换成整数】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能 ...

  7. 一次使用scrapy的问题记录

    前景描述: 需要获取某APP的全国订单量,及抢单量.由于没有全国的选项所以只能分别对每一个城市进行订单的遍历.爬虫每天运行一次,一次获取48小时内的订单,从数据库中取出昨天的数据进行对比,有订单被抢则 ...

  8. Seaborn数据可视化入门

    在本节学习中,我们使用Seaborn作为数据可视化的入门工具 Seaborn的官方网址如下:http://seaborn.pydata.org 一:definition Seaborn is a Py ...

  9. 使用Nginx实现负载均衡(tomcat集群之后实现交叉访问)

    tomcat集群(多一台服务器),使用nginx实现负载均衡(upstream sina中配置即可):使用上次博客中的sina案例 1.首先再加一个tomcat服务: 2.修改server.xml配置 ...

  10. Java测试(二)

    一.选择题(每题2分,共40分) 1.下面哪个是Java语言中正确的标识符(C ) a)      3com        b)import        c)that d)this 2.下面哪个语句 ...