[java网络编程]线程的互斥
2015-03-07 16:48
369 查看
线程互斥是指某一资源同时只允许一个访问者(程序调用)对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
[引例]
修改方法
为什么?
synchronized代表这个方法或者代码块加锁,当前有一个线程正在调用这个方法或者代码块时都必须得等当前线程将该方法或代码块调用完成后,其它等待调用的线程才可以开始调用。
不加synchronized时print方法正在输出“lydon”,这个时候程序直接开始输出“sundroid”,自然会出现“lydonsund”这样类似我们不想看到的结果。
[引例]
package cn.sundroid.thread; public class TestSynchronized { public static void main(String[] args) { new TestSynchronized().init(); } private void init() { final Printer printer = new Printer(); /** *开启一个新线程 */ new Thread(new Runnable() { @Override public void run() { while(true){ try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } printer.print("sundroid"); } } }).start(); /** *开启一个新线程 */ new Thread(new Runnable() { @Override public void run() { while(true){ try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } printer.print("lydon"); } } }).start(); } private class Printer { private void print(String name) { int len = name.length(); for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); } } }
修改方法
为什么?
synchronized代表这个方法或者代码块加锁,当前有一个线程正在调用这个方法或者代码块时都必须得等当前线程将该方法或代码块调用完成后,其它等待调用的线程才可以开始调用。
不加synchronized时print方法正在输出“lydon”,这个时候程序直接开始输出“sundroid”,自然会出现“lydonsund”这样类似我们不想看到的结果。
相关文章推荐
- Java线程——线程池结合网络编程
- java网络编程(一)单线程网络编程
- Java网络编程:从线程返回信息。
- Java网络编程之单线程下载文件设置显示进度
- Java网络编程 线程
- linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
- 通过培训学到的一个java的基于线程,网络编程等的文件多线程断点下载器(断点功能还在操作实践中)
- java网络编程-双线程实现UDP通信
- Java线程及网络编程简介
- Java网络编程—(4)线程下
- 读书笔记-java网络编程-3线程-java线程概述
- 读书笔记-java网络编程-3线程-从线程返回信息
- Java网络编程学习笔记(三)线程
- Java网络编程—(3)线程上
- [java网络编程]线程与进程
- Java网络编程之单线程下载文件设置显示进度(一)
- 实训 Java基础知识---流,线程,网络编程
- Java网络服务器编程
- Java网络服务器编程(NIO版)
- 第八讲 Java网络编程