package com.gzhs.zsd.thread;
/***
-
多线程同步互斥
-
@author 谢泽鹏
-
@version 1.0
*/
public class Traditional_Synchronized {public static void main(String[] args) {
//测试普通线程1
//new MySynchronizedThread().More_Thread1();
//多线程同步1
//new MySynchronizedThread().More_Thread2();
//多线程同步2
//new MySynchronizedThread().More_Thread3();
}/***
*- @方法名称:More_Thread1
- @描述:普通模式 出现状况: 线程xxx调度outprint。 未完成此调度时,程序执行新的线程。
- @作者: 谢泽鹏
- @创建日期: 2012-5-8
- @参数:
*/
public void More_Thread1()
{
final MyPrint1 myPrint = new MyPrint1();
//创建线程1
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
myPrint.outprint(“My Name is xiezepeng!”);
} catch (InterruptedException e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}
}
}).start();
//创建线程2
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
myPrint.outprint(“My Name is suenpeng!”);
} catch (InterruptedException e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}} }).start();
}
//内部类
class MyPrint1{public void outprint(String name)
{
for(int i = 0; i < name.length(); i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
}/***
*- @方法名称:More_Thread2
- @描述: 多线程同步方式1
- @作者: 谢泽鹏
- @创建日期: 2012-5-8
- @参数:
*/
public void More_Thread2()
{
final MyPrint2 myPrint = new MyPrint2();
//创建线程1
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
myPrint.outprint(“My Name is xiezepeng!”);
} catch (InterruptedException e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}
}
}).start();
//创建线程2
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
myPrint.outprint(“My Name is suenpeng!”);
} catch (InterruptedException e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}}
}).start();
}//内部类
class MyPrint2{public void outprint(String name)
{
//同步 (参数表示同一个对象)
//加上synchronized关键词, 参数表示同一个对象,
//此时在多线程中, 即表示该线程完毕后,在执行新的线程。
synchronized (this) {
for(int i = 0; i < name.length(); i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}/***
*- @方法名称:More_Thread3
- @描述: 多线程同步方式2
- @作者: 谢泽鹏
- @创建日期: 2012-5-8
- @参数:
*/
public void More_Thread3()
{
final MyPrint3 myPrint = new MyPrint3();
//创建线程1
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
myPrint.outprint(“My Name is xiezepeng!”);
} catch (InterruptedException e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}
}
}).start();
//创建线程2
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
myPrint.outprint(“My Name is suenpeng!”);
} catch (InterruptedException e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}}
}).start();
}//内部类
class MyPrint3{//该方法加上同步关键词修饰,即标识该同步与当前对象, 即this对象
//此时在多线程中, 即表示该线程完毕后,在执行新的线程。
public synchronized void outprint(String name)
{
for(int i = 0; i < name.length(); i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}