多线程实现方式的其中之一是实现runnable方式,并且重写run方法
package Thrad;
/**
* @author 子曰无衣
* @version 创建时间:2018年12月16日 上午10:38:32
*/
public class Mythread implements Runnable{
private String name;
public Mythread() {
}
public Mythread(String name) {
super();
this.name = name;
}
@Override
public synchronized void run() {
for(int i=0;i<50;i++)
{
System.out.println(name+"正在执行");
}
}
}
在main 方法中新建两个实现了runnable接口的类的对象,分别当作两个线程类的入参,也就是产生了两个线程类,这两个线程类中都有一个加锁的方法,当两个线程类调用start方法时,这两个线程中的加锁的方法是互不干扰的。
.............................................................................................................................................................................................................................
package Thrad;
/**
* @author 子曰无衣
* @version 创建时间:2018年12月16日 上午10:42:35
*/
public class Test {
public static void main(String[] args) {
Mythread m1 = new Mythread("A");
Mythread m2 = new Mythread("B");
Thread t1 = new Thread(m1);
Thread t2 = new Thread(m2);
t1.start();
t2.start();
}
}
原因是这两个线程是有两个不同的线程类对象产生的,所以是产生了两把不同的锁。如果想要实现同一把锁,可以在new Thread 类的时候使用同一个线程类,即Thread的入参是为同一个Mythread对象
package Thrad;
/**
* @author 子曰无衣
* @version 创建时间:2018年12月16日 上午10:42:35
*/
public class Test {
public static void main(String[] args) {
Mythread m1 = new Mythread("A");
Mythread m2 = new Mythread("B");
Thread t1 = new Thread(m1);
Thread t2 = new Thread(m1);
t1.start();
t2.start();
}
}
这样产生的线程是由同一个对象产生的,其中的锁也就起到了作用,能够实现同步执行