/*
* 线程同步与死锁
* 1.同步代码块
* 2.同步方法
* 线程同步会降低性能的问题,但是提高数据安全性。
*
* 同步准则:
* 1、是代码块保持简短,跟线程变化没有关系数据移出去处理;
* 2、不要阻塞。如inputstream.read();;
* 3、在持有锁的时候,不要对其他对象调用方法。
*/
public class MySyncDemo {
public static void main(String[] args){
MyThread mythread=new MyThread();
Thread t1=new Thread(mythread,"TT11");
Thread t2=new Thread(mythread,"TT22");
t1.start();
t2.start();
}
}
class MyThread implements Runnable{
Object obj=new Object();//同步对象
@Override
public void run() {
this.domthod();
/*
* 同步代码块
*/
/*synchronized(obj){
System.out.println(Thread.currentThread().getName()+" do something");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" done");
}
*/
}
/*
* 同步方法
*
*/
public synchronized void domthod(){
System.out.println(Thread.currentThread().getName()+" do something");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" done");
}
}
* 线程同步与死锁
* 1.同步代码块
* 2.同步方法
* 线程同步会降低性能的问题,但是提高数据安全性。
*
* 同步准则:
* 1、是代码块保持简短,跟线程变化没有关系数据移出去处理;
* 2、不要阻塞。如inputstream.read();;
* 3、在持有锁的时候,不要对其他对象调用方法。
*/
public class MySyncDemo {
public static void main(String[] args){
MyThread mythread=new MyThread();
Thread t1=new Thread(mythread,"TT11");
Thread t2=new Thread(mythread,"TT22");
t1.start();
t2.start();
}
}
class MyThread implements Runnable{
Object obj=new Object();//同步对象
@Override
public void run() {
this.domthod();
/*
* 同步代码块
*/
/*synchronized(obj){
System.out.println(Thread.currentThread().getName()+" do something");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" done");
}
*/
}
/*
* 同步方法
*
*/
public synchronized void domthod(){
System.out.println(Thread.currentThread().getName()+" do something");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" done");
}
}