实现过程
- 自己描述一个类
- 继承父类Thread
- 重写run方法
- new一个线程对象,调用start方法,让线程进入就绪状态 ```java package test;
public class Person extends Thread { private String n;
public Person(String name) {
this.n = name;
}
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(this.n + "跑了" + i + "米");
}
}
public static void main(String[] args) {
Person perons1 = new Person("a");
Person perons2 = new Person("b");
Person perons3 = new Person("c");
perons1.start();
perons2.start();
perons3.start();
}
}
第二种线程对象的写法<br />使用实现
```java
package test;
public class Person implements Runnable {
private String n;
public Person(String name) {
this.n = name;
}
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(this.n + "跑了" + i + "米");
}
}
public static void main(String[] args) {
Person perons1 = new Person("a");
Person perons2 = new Person("b");
Person perons3 = new Person("c");
new Thread(perons1).start();
new Thread(perons2).start();
new Thread(perons3).start();
}
}
synchronized
锁定的是对象
public class Test{
public synchronized void get() { // 可以写在这里
}
public void get() {
int a = 1;
synchronized(对象){ // 可以写在这里
}
}
}
wait
锁定的是线程
public class Test {
public void get(){
this.wait();
}
}
加入有个Test1类对象调用了Test的get方法,锁定的是Test1的线程
notify/notifyAll 唤醒线程
join
合并线程——可以传参数
package test;
public class Person extends Thread {
private String n;
public Person(String name) {
this.n = name;
}
public void run() {
Pig p = new Pig();
try {
p.join(); // Pig线程加入Person线程
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Timer
有计时器的功能