69,379
社区成员
发帖
与我相关
我的任务
分享
package com.huawei.manager;
/**
* 线程同步方式:1 代码块同步 2 方法同步 3 对象同步
*
* 同步关键字:synchronized
*/
public class ThreadTest
{
private TaskTest taskTest;
ThreadTest()
{
taskTest = new TaskTest();
threadTest();
}
/**
* 线程同步任务
*
* @return void
*/
public void threadTest()
{
new Thread(new ThreadC(taskTest, "张三")).start();
new Thread(new ThreadC(taskTest, "李四")).start();
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
new ThreadTest();
}
}
class ThreadA implements Runnable
{
private TaskTest taskTest;
private String name;
ThreadA(TaskTest taskTest, String name)
{
this.taskTest = taskTest;
this.name = name;
}
public void run()
{
// TODO Auto-generated method stub
taskTest.taskTestA(name);
}
}
class ThreadB implements Runnable
{
private TaskTest taskTest;
private String name;
ThreadB(TaskTest taskTest, String name)
{
this.taskTest = taskTest;
this.name = name;
}
public void run()
{
// TODO Auto-generated method stub
taskTest.taskTestB(name);
}
}
/**
* 对象同步
*
* 同步作用域:整个对象同步
*/
class ThreadC implements Runnable
{
private TaskTest taskTest;
private String name;
ThreadC(TaskTest taskTest, String name)
{
this.taskTest = taskTest;
this.name = name;
}
public void run()
{
// TODO Auto-generated method stub
synchronized(taskTest)
{
taskTest.taskTestA(name);
}
}
}
class TaskTest
{
/**
* 方法同步
*
* 同步作用域:整个方法同步
*/
public void taskTestA(String name)
{
for(int numA = 0; numA < 20; numA++)
{
System.out.println(name + "正在操作...");
}
System.out.println(name + "退出操作...");
}
/**
* 代码块同步
*
* 同步作用域:独立代码块同步
*/
public void taskTestB(String name)
{
synchronized(this)
{
for(int numA = 0; numA < 20; numA++)
{
System.out.println(name + "正在操作...");
}
System.out.println(name + "退出操作...");
}
}
}