创建线程两种方式
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); } } }
结果:
以上个人学习笔记,有不对的地方欢迎指出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)