java实现多线程的方法:1.继承Thread类;2.实现Runable接口
方法一:继承Thread类,重写run方法
class T extends Thread{
...................
public void run() {
................
}
}
启动线程:
T t= new T();
t.start();
方法2:实现Runable接口,重写run方法
class T implements Runnable{
...................
public void run() {
................
}
}
启动线程:
T t= new T();
new Thread(t).start;
2)Runnable可以实现资源的共享,但是Thread不能
<span style="color:#ff0000;">
</span>class T extends Thread {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
public class Test {
public static void main(String[] args) {
T mt1 = new T();
T mt2 = new T();
T mt3 = new T();
mt1.start();// 每个线程都各卖了10张,共卖了30张票
mt2.start();// 但实际只有10张票,每个线程都卖自己的票
mt3.start();// 没有达到资源共享
}
}
class MyThread implements Runnable {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
public class Test {
public static void main(String[] args) {
T mt=new T();
new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();//个实例化对象mt,就会出现异常
new Thread(mt).start();
}
}
相关方法:yield ,sleep,run,interrupt,join,isAlive,getName,getId;(wait,notify,notifyAll属于object方法)
yield,sleep,wait方法比较:前两者占着锁,后者不占锁;使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用; sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常;
join:等待该线程结束