java学习(六)多线程 中
如果线程需要共享数据怎么办?
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学习(六)多线程 中相关推荐
- java学习(六)多线程 上
进程:进程是一个正在执行的程序,这个程序呢都有一个执行顺序,这个执行顺序是一个执行路径,或者说是一个控制单元. 所有的进程不会同时发生,而是来回切换. 线程:打个比方,一堆货物,一个人搬花十个小时,十 ...
- java学习(六)多线程 下
线程之间是怎么通讯的呢? 线程之间的通信是多个线程操作同一个资源 代码: package tread; class Res{String name;String sex; } class input ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- Java学习笔记---多线程并发
Java学习笔记---多线程并发 (一)认识线程和进程 (二)java中实现多线程的三种手段 [1]在java中实现多线程操作有三种手段: [2]为什么更推荐使用Runnable接口? [3][补充知 ...
- Java 学习 Day17 多线程
Java 学习 Day17 文章目录 Java 学习 Day17 一.基本概念:程序.进程.线程 二.线程的创建和使用 三.多线程的创建,方式一:继承于Thread类 四. 创建多线程的方式二:实现R ...
- Java并发编程(多线程)中的相关概念
众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试中必问的题,一个好的Java程序员是必须对并发编程这块有所了解的. 并发必须知道的概念 在深入学习并发编程之前,我们需要了解几个基本 ...
- java中什么是 伪共享_【Java】聊聊多线程中的伪共享现象
首页 专栏 java 文章详情 0 聊聊多线程中的伪共享现象 小强大人发布于 1 月 27 日 什么是伪共享? 讲伪共享之前,让我们先乘坐时光机,回到大学课堂,来重温下计算机组成原理的基础知识.我们知 ...
- java wait notifyall_Java多线程中的wait与notify,notifyall例子
文章来给各位介绍一下Java多线程中的wait与notify,notifyall例子,希望文章能给各位朋友带来帮助哦. 在Java多线程编程中,wait()的作用的是让当前线程进入阻塞状态,notif ...
- Java学习笔记---多线程同步的五种方法
一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会 ...
最新文章
- Java多线程发展简史
- 我看过的SDN方面的好文章
- Java中的比较总结
- mysql全量和增量备份脚本
- 【Python】raise ValueError(Too many dimensions: %d %d. % (ndim, ndmax))问题
- Doug Cutting—访谈录
- .Net下你不得不看的分表分库解决方案-多字段分片
- 多页面webpack配置
- 要闻君说:facebook迎来“全球宕机”惊险时刻;吸引大牛!拼多多成立了技术委员会;胡晓明卸任庚接任,阿里云计算迎来法人变更...
- SSM项目调用Dao层查询方法传入正确参数但查不到数据
- 51单片机汇编_1_内外存储器转移数据
- mybatis批量插入和批量更新
- 电商业务中的五大机器学习问题!
- python做估值模型_理解债券估值中的摊销/摊余成本,利用EXCEL+Python估值建模
- springcloud中feign调用的权限认证
- 【渝粤题库】陕西师范大学209008 教师伦理学 作业
- 计算机学识水平自我评价,计算机毕业自我鉴定范文
- vue2.6.11版本源码运行报错问题处理
- Socket 和 ServerSocket
- 网易校园招聘笔试题目