Thread和Runnable一些区别以及线程的同步

来源:互联网 发布:linux开机no such file 编辑:程序博客网 时间:2024/06/06 14:19
一、Thread的用法,private class MyThread extends Thread {
@Override
public void run() {
for (int k = 0; k < 10; k++) {
i = i + 1;
System.out.println(Thread.currentThread().getName() + "正在执行。。。" + i);
}
}
}

二、实现Runable接口,private class MyThread1 implements Runnable {
public void run() {
for (int k = 0; k < 10; k++) {
i = i + 1;
System.out.println(Thread.currentThread().getName() + "正在执行" + i);
}
}
}


开启线程,MyThread t = new MyThread(); 
MyThread t1 = new MyThread();
t.start();t1.start();如果是t.run();t1.run();运行的就是主main线程,而t,t1两个线程都未开启

实现Runable接口
  MyThread1 t = new MyThread1();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
都是交替执行的。


线程同步

private class MyThread extends Thread {
@Override
public synchronized void run() {
for (int k = 0; k < 10; k++) {
i = i + 1;
System.out.println(Thread.currentThread().getName() + "正在执行。。。" + i);
}
}
}

private class MyThread1 implements Runnable {
public synchronized void run() {
for (int k = 0; k < 10; k++) {
i = i + 1;
System.out.println(Thread.currentThread().getName() + "正在执行" + i);
}
}
}

实现Runable接口
MyThread1 t = new MyThread1();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
执行的就是按照顺序来执行,线程一执行到10,然后开始执行线程二到20,。。。。

继承Thread
MyThread t = new MyThread();
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
MyThread t3 = new MyThread();
MyThread t4 = new MyThread();

t.start();
t1.start();
t2.start();
t3.start();
t4.start();

执行的结果就是无序的。
0 0