如果线程需要共享数据怎么办?

synchronized(对象)
{
需要同步的代码
}

气死我了上代码:

package tread;class Test implements Runnable
{   int t = 20;
Object a=new Object();public void run() {while(true) {synchronized(a){if(t>0) {try {Thread.sleep(10);}catch(Exception e){}System.out.println("数字为"+t--);}}}
}
}
public  class acsad
{public static void main(String[] args) {Test t=new Test();Thread t1=new Thread(t);Thread t2=new Thread(t);Thread t3=new Thread(t);Thread t4=new Thread(t);t1.start();t2.start();t3.start();t4.start();}
}
部分输出为:
数字为20
数字为19
数字为18
数字为17
...数字为3
数字为2
数字为1

第二种同步的方法(某个函数内同步)

package tread;class Test implements Runnable
{   int t = 20;public void run() {while(true) {{show();}}
}public synchronized void show() {if(t>0) {System.out.println("数字为"+t--);}}
}
public  class acsad
{public static void main(String[] args) {Test t=new Test();Thread t1=new Thread(t);Thread t2=new Thread(t);Thread t3=new Thread(t);Thread t4=new Thread(t);t1.start();t2.start();t3.start();t4.start();}
}
输出:
数字为20
数字为19
数字为18
数字为17
。。。
数字为1

这里为什么要额外建一个函数呢?
为了同步的代码只是需要的代码。

如果t是静态的那该这个程序会 不能运行,咱们怎么能让他运行呢?
上代码:

package tread;class Test implements Runnable
{   static int t = 20;public void run() {while(true) {{   synchronized(Test.class) { //在这里换成    类名.classif(t>0) {System.out.println("数字为"+t--);}}}}
}
}
public  class acsad
{public static void main(String[] args) {Test t=new Test();Thread t1=new Thread(t);Thread t2=new Thread(t);Thread t3=new Thread(t);Thread t4=new Thread(t);t1.start();t2.start();t3.start();t4.start();}
}
输出:
数字为20
数字为19
数字为18
数字为17
。。。
数字为1

为什么这么做呢,正常的情况,静态的同步方法使用的方法是该方法所在类的字节码文件对象。(类名.class)

java学习(六)多线程 中相关推荐

  1. java学习(六)多线程 上

    进程:进程是一个正在执行的程序,这个程序呢都有一个执行顺序,这个执行顺序是一个执行路径,或者说是一个控制单元. 所有的进程不会同时发生,而是来回切换. 线程:打个比方,一堆货物,一个人搬花十个小时,十 ...

  2. java学习(六)多线程 下

    线程之间是怎么通讯的呢? 线程之间的通信是多个线程操作同一个资源 代码: package tread; class Res{String name;String sex; } class input ...

  3. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  4. Java学习笔记---多线程并发

    Java学习笔记---多线程并发 (一)认识线程和进程 (二)java中实现多线程的三种手段 [1]在java中实现多线程操作有三种手段: [2]为什么更推荐使用Runnable接口? [3][补充知 ...

  5. Java 学习 Day17 多线程

    Java 学习 Day17 文章目录 Java 学习 Day17 一.基本概念:程序.进程.线程 二.线程的创建和使用 三.多线程的创建,方式一:继承于Thread类 四. 创建多线程的方式二:实现R ...

  6. Java并发编程(多线程)中的相关概念

    众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试中必问的题,一个好的Java程序员是必须对并发编程这块有所了解的. 并发必须知道的概念 在深入学习并发编程之前,我们需要了解几个基本 ...

  7. java中什么是 伪共享_【Java】聊聊多线程中的伪共享现象

    首页 专栏 java 文章详情 0 聊聊多线程中的伪共享现象 小强大人发布于 1 月 27 日 什么是伪共享? 讲伪共享之前,让我们先乘坐时光机,回到大学课堂,来重温下计算机组成原理的基础知识.我们知 ...

  8. java wait notifyall_Java多线程中的wait与notify,notifyall例子

    文章来给各位介绍一下Java多线程中的wait与notify,notifyall例子,希望文章能给各位朋友带来帮助哦. 在Java多线程编程中,wait()的作用的是让当前线程进入阻塞状态,notif ...

  9. Java学习笔记---多线程同步的五种方法

    一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会 ...

最新文章

  1. Java多线程发展简史
  2. 我看过的SDN方面的好文章
  3. Java中的比较总结
  4. mysql全量和增量备份脚本
  5. 【Python】raise ValueError(Too many dimensions: %d %d. % (ndim, ndmax))问题
  6. Doug Cutting—访谈录
  7. .Net下你不得不看的分表分库解决方案-多字段分片
  8. 多页面webpack配置
  9. 要闻君说:facebook迎来“全球宕机”惊险时刻;吸引大牛!拼多多成立了技术委员会;胡晓明卸任庚接任,阿里云计算迎来法人变更...
  10. SSM项目调用Dao层查询方法传入正确参数但查不到数据
  11. 51单片机汇编_1_内外存储器转移数据
  12. mybatis批量插入和批量更新
  13. 电商业务中的五大机器学习问题!
  14. python做估值模型_理解债券估值中的摊销/摊余成本,利用EXCEL+Python估值建模
  15. springcloud中feign调用的权限认证
  16. 【渝粤题库】陕西师范大学209008 教师伦理学 作业
  17. 计算机学识水平自我评价,计算机毕业自我鉴定范文
  18. vue2.6.11版本源码运行报错问题处理
  19. Socket 和 ServerSocket
  20. 网易校园招聘笔试题目

热门文章

  1. Java开发设计——UML类图
  2. 程序员面试金典——7.4加法运算替代
  3. hexo之next主题添加分类
  4. 二叉树的构建--BST
  5. 树莓派4B安装ffmpeg的方法
  6. opencv多目标追踪容器
  7. 【Oracle】进阶知识进一步了解
  8. 对称加密算法在C#中的踩坑日常
  9. 怎样把Linux的私钥文件id_rsa转换成putty的ppk格式
  10. MYSQL数据库表操作pdf