线程之间是怎么通讯的呢?
线程之间的通信是多个线程操作同一个资源
代码:

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学习(六)多线程 下相关推荐

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

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

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

    如果线程需要共享数据怎么办? synchronized(对象) { 需要同步的代码 } 气死我了上代码: package tread;class Test implements Runnable { ...

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

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

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

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

  5. java.text.SimpleDateFormat多线程下的问题

    1. 今天在做性能压测的时候发现java.text.SimpleDateFormat多线程下的错误 2. 先贴出两段错误大家看一下: Exception in thread "pool-1- ...

  6. Java 学习 Day17 多线程

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

  7. java race condition_java 多线程下race condition问题

    这个问题的讨论来自内部的一个关于"多线程环境下使用Hashmap的安全问题"的讨论,HashMap多线程的问题之前已经提过一次,见之前的blog.本篇文章主要讨论多线程下race ...

  8. java学习(多线程)

    1.线程概念 进程则是执行程序的一次执行过程,他是一个动态的概念.是系统资源分配的单位 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义 核心概念 对同一份资源操作 ...

  9. Java学习笔记 --- 多线程

    一.线程相关概念 程序 程序是为完成特定任务,用某种语言编写的一组指令的集合.简单的说就是我们写的代码 进程 1.进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存 ...

最新文章

  1. “奥利”来啦,腾讯Robotics X实验室跑出的“轮滑小子”
  2. Sigma Function LightOJ - 1336[约数和定理]
  3. leetCode 46. Permutations 回溯问题 | Medium
  4. 两个经典递归问题:菲波那契数列 + 汉诺塔
  5. 2021MIT博士pluskid年终总结
  6. python utf8_肿么在Python里使用UTF-8编码
  7. 学好Python能做什么?有哪些从业方向?
  8. iframe框架大小自适应
  9. 利用Asp.Net Core的MiddleWare思想处理复杂业务流程
  10. leetcode 滑动窗口小结 (二)
  11. rethat linux安装nginx,nginx系列-00-编译安装-CentOS/RedHat
  12. 安装windows时loading files结束就重启_软网推荐:不用制作系统盘 也能安装新系统...
  13. oracle执行plus时跳出,oracle – 从shell脚本运行sqlplus时管理错误处理
  14. 论文排版 | Texworks
  15. Java 进制转换函数
  16. C++if语句进行分段函数计算
  17. 上位机与PLC基于Fins/UDP通信
  18. 2022最新仿绚丽彩虹音乐播放器完整源码
  19. 全球最大湾区|微信大数据:《粤港澳大湾区智慧生活圈报告》
  20. C++小游戏《末日之战1:新生》1.12.31823.132

热门文章

  1. ASP.NET的HTTP请求处理方法?
  2. 想交换机高级篇的朋友们,你们有福啦
  3. shell中的getopt与getopts
  4. Mysql server has gone away
  5. Matlab之数据的输入与输出
  6. 查看不同用户使用GPU的情况
  7. 修改文件名与删除文件
  8. 【loj3056】【hnoi2019】多边形
  9. java 使用 lamba 表达式处理二维数组
  10. 洛谷 P2647 最大收益