线程基础 - 图1
实现过程

  1. 自己描述一个类
  2. 继承父类Thread
  3. 重写run方法
  4. new一个线程对象,调用start方法,让线程进入就绪状态 ```java package test;

public class Person extends Thread { private String n;

  1. public Person(String name) {
  2. this.n = name;
  3. }
  4. public void run() {
  5. for (int i = 0; i < 100; i++) {
  6. System.out.println(this.n + "跑了" + i + "米");
  7. }
  8. }
  9. public static void main(String[] args) {
  10. Person perons1 = new Person("a");
  11. Person perons2 = new Person("b");
  12. Person perons3 = new Person("c");
  13. perons1.start();
  14. perons2.start();
  15. perons3.start();
  16. }

}

  1. 第二种线程对象的写法<br />使用实现
  2. ```java
  3. package test;
  4. public class Person implements Runnable {
  5. private String n;
  6. public Person(String name) {
  7. this.n = name;
  8. }
  9. public void run() {
  10. for (int i = 0; i < 100; i++) {
  11. System.out.println(this.n + "跑了" + i + "米");
  12. }
  13. }
  14. public static void main(String[] args) {
  15. Person perons1 = new Person("a");
  16. Person perons2 = new Person("b");
  17. Person perons3 = new Person("c");
  18. new Thread(perons1).start();
  19. new Thread(perons2).start();
  20. new Thread(perons3).start();
  21. }
  22. }

synchronized

锁定的是对象

  1. public class Test{
  2. public synchronized void get() { // 可以写在这里
  3. }
  4. public void get() {
  5. int a = 1;
  6. synchronized(对象){ // 可以写在这里
  7. }
  8. }
  9. }

wait

锁定的是线程

  1. public class Test {
  2. public void get(){
  3. this.wait();
  4. }
  5. }
  6. 加入有个Test1类对象调用了Testget方法,锁定的是Test1的线程

notify/notifyAll 唤醒线程

join

合并线程——可以传参数

  1. package test;
  2. public class Person extends Thread {
  3. private String n;
  4. public Person(String name) {
  5. this.n = name;
  6. }
  7. public void run() {
  8. Pig p = new Pig();
  9. try {
  10. p.join(); // Pig线程加入Person线程
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }

Timer

有计时器的功能