java学习(六)多线程 下
线程之间是怎么通讯的呢?
线程之间的通信是多个线程操作同一个资源
代码:
package tread;
class Res{String name;String sex;
}
class input implements Runnable
{ private Res r;input(Res r){this.r=r;}public void run() {int x=0;while(true) {if(x==0) {r.name="李四";r.sex="男";}else {r.name="刘梅梅";r.sex="女";}x=(x+1)%2;}}
}
class output implements Runnable
{ private Res r;output(Res r){this.r=r;}public void run() {System.out.println(r.name+"...."+r.sex);}
}
public class xxxx {public static void main(String[] args) {Res r=new Res();
input in=new input(r);
output out=new output(r);Thread t1=new Thread(in);
Thread t2=new Thread(out);t1.start();
t2.start();}
}
输出:刘梅梅....男
这样会出错的,咱们要怎么解决呢?需要同步:
气死我了上代码:
package tread;
class Res{String name;String sex;
}
class input implements Runnable
{ private Res r;input(Res r){this.r=r;}public void run() {int x=0;while(true) {synchronized(input.class) {if(x==0) {r.name="李四";r.sex="男";}else {r.name="刘梅梅";r.sex="女";}x=(x+1)%2;}}}
}
class output implements Runnable
{ private Res r;output(Res r){this.r=r;}public void run() {synchronized(input.class) {System.out.println(r.name+"...."+r.sex);}}
}
public class xxxx {public static void main(String[] args) {Res r=new Res();
input in=new input(r);
output out=new output(r);Thread t1=new Thread(in);
Thread t2=new Thread(out);t1.start();
t2.start();}
}
输出:李四....男
加了同步以后,会好很多,注意output和input都要同步。
用wait()和noyify()方法实现线程的唤醒机制。
package tread;
class Res{String name;String sex;boolean flag=false;
}
class input implements Runnable
{ private Res r;input(Res r){this.r=r;}public void run() {int x=0;while(true) {if(r.flag)try {r.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}synchronized(input.class) {if(x==0) {r.name="李四";r.sex="男";}else {r.name="刘梅梅";r.sex="女";}x=(x+1)%2;r.notify();}}}
}
class output implements Runnable
{ private Res r;output(Res r){this.r=r;}public void run() {synchronized(input.class) {System.out.println(r.name+"...."+r.sex);}}
}
public class xxxx {public static void main(String[] args) {Res r=new Res();
input in=new input(r);
output out=new output(r);
Thread t1=new Thread(in);
Thread t2=new Thread(out);
t1.start();
t2.start();}
}
输出:
李四....男
刘梅梅....女
李四....男
刘梅梅....女
这样会两边交叉进行。
守护线程:在非守护线程运行完成的时候,守护线程也关闭。
t1.setDaemon(true);t1.start();
在代码块中这样写了start()函数前面
join()方法,设置了join方法的线程,主线程会等这个线程去执行完成再去结束。
t1.join();t1.start();
java学习(六)多线程 下相关推荐
- java学习(六)多线程 上
进程:进程是一个正在执行的程序,这个程序呢都有一个执行顺序,这个执行顺序是一个执行路径,或者说是一个控制单元. 所有的进程不会同时发生,而是来回切换. 线程:打个比方,一堆货物,一个人搬花十个小时,十 ...
- java学习(六)多线程 中
如果线程需要共享数据怎么办? synchronized(对象) { 需要同步的代码 } 气死我了上代码: package tread;class Test implements Runnable { ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- Java学习笔记---多线程并发
Java学习笔记---多线程并发 (一)认识线程和进程 (二)java中实现多线程的三种手段 [1]在java中实现多线程操作有三种手段: [2]为什么更推荐使用Runnable接口? [3][补充知 ...
- java.text.SimpleDateFormat多线程下的问题
1. 今天在做性能压测的时候发现java.text.SimpleDateFormat多线程下的错误 2. 先贴出两段错误大家看一下: Exception in thread "pool-1- ...
- Java 学习 Day17 多线程
Java 学习 Day17 文章目录 Java 学习 Day17 一.基本概念:程序.进程.线程 二.线程的创建和使用 三.多线程的创建,方式一:继承于Thread类 四. 创建多线程的方式二:实现R ...
- java race condition_java 多线程下race condition问题
这个问题的讨论来自内部的一个关于"多线程环境下使用Hashmap的安全问题"的讨论,HashMap多线程的问题之前已经提过一次,见之前的blog.本篇文章主要讨论多线程下race ...
- java学习(多线程)
1.线程概念 进程则是执行程序的一次执行过程,他是一个动态的概念.是系统资源分配的单位 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义 核心概念 对同一份资源操作 ...
- Java学习笔记 --- 多线程
一.线程相关概念 程序 程序是为完成特定任务,用某种语言编写的一组指令的集合.简单的说就是我们写的代码 进程 1.进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存 ...
最新文章
- “奥利”来啦,腾讯Robotics X实验室跑出的“轮滑小子”
- Sigma Function LightOJ - 1336[约数和定理]
- leetCode 46. Permutations 回溯问题 | Medium
- 两个经典递归问题:菲波那契数列 + 汉诺塔
- 2021MIT博士pluskid年终总结
- python utf8_肿么在Python里使用UTF-8编码
- 学好Python能做什么?有哪些从业方向?
- iframe框架大小自适应
- 利用Asp.Net Core的MiddleWare思想处理复杂业务流程
- leetcode 滑动窗口小结 (二)
- rethat linux安装nginx,nginx系列-00-编译安装-CentOS/RedHat
- 安装windows时loading files结束就重启_软网推荐:不用制作系统盘 也能安装新系统...
- oracle执行plus时跳出,oracle – 从shell脚本运行sqlplus时管理错误处理
- 论文排版 | Texworks
- Java 进制转换函数
- C++if语句进行分段函数计算
- 上位机与PLC基于Fins/UDP通信
- 2022最新仿绚丽彩虹音乐播放器完整源码
- 全球最大湾区|微信大数据:《粤港澳大湾区智慧生活圈报告》
- C++小游戏《末日之战1:新生》1.12.31823.132