创建线程两种方式
1.继承 Thread类
2.实现 Runnable接口
这里我用的第一种方式,创建一个类并继承Thread,重写父类的run()方法。
public class MyThread extends Thread{
@Override
public void run() {
this.abc();
}
public void abc(){
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() +" = "+ i);
}
}
}
public class Test {
public static void main(String[] args) {
MyThread myThread = new MyThread();
MyThread myThread1 = new MyThread();
myThread.start();
myThread1.start();
}
}
输出结果:
结果显示,两个线程在互抢资源,那如果我想线程1执行完再执行线程2,就需要加个锁 synchronized 。
public class MyThread extends Thread{
@Override
public void run() {
this.abc();
}
public static synchronized void abc(){
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() +" = "+ i);
}
}
}
public class Test {
public static void main(String[] args) {
MyThread myThread = new MyThread();
MyThread myThread1 = new MyThread();
myThread.start();
myThread1.start();
}
}
输出结果:
补充说明一下方法上为什么加了 static和synchronized
会发现 abc方法加上了两个关键字 static和synchronized
- synchronized 是同步锁的意思,意思就是我这个方法执行完了以后,其他地方才可以继续调用这个方法执行。
- static修饰就变成了静态方法,这样两个线程操作的都是一个内存,如果不加上static操作的就是两个内存的东西了,如果不加的话执行结果如下:
代码:
public class MyThread extends Thread{
@Override
public void run() {
this.abc();
}
public synchronized void abc(){
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() +" = "+ i);
}
}
}
结果:
以上个人学习笔记,有不对的地方欢迎指出