1、继承Thread
packageFirst;public class MyThread extendsThread {public voidrun() {super.run();
System.out.println("mythread");
}
}
packageFirst;public classTest {public static voidmain(String[] args) {
MyThread myThread= newMyThread();
myThread.start();
System.out.println("main");
}
}
在使用多线程技术时,代码的运行结果与代码执行顺序或调用顺序是无关的。
packageFirst;public classTest {public static voidmain(String[] args) {
MyThread myThread= newMyThread();
myThread.start();
myThread.start();
System.out.println("main");
}
}
多次执行start(),会出现java.lang.IllegalThreadStateException异常
packageFirst;public classTest {public static voidmain(String[] args) {
MyThread myThread= newMyThread();
myThread.run();
System.out.println("main");
}
}
start()通知“”线程规划器“”此线程已经准备就绪,等待调用线程对象的run(),具有异步效果。如果直接调用run(),则是同步,从上到下顺序依次执行
执行start()顺序不代表线程启动的顺序。
2、实现runnable接口
packageFirst;public class MyRunnable implementsRunnable {
@Overridepublic voidrun() {
System.out.println("运行中");
}
}
packageFirst;public classRun {public static voidmain(String[] args) {
Runnable runnable= newMyRunnable();
Thread thread= newThread(runnable);
thread.start();
System.out.println("运行结束");
}
}
Thread构造函数:
构造函数Thread(Runnable target)意味着不光可以传入runnable接口的对象,还可以传入Thread类的对象,这样做完全可以将一个Thread对象的run()方法交给其他线程进行调用
实例变量与线程安全
(1)不共享数据
packageFirst;public class MyThread extendsThread {private int count = 5;publicMyThread(String name) {super();//设置线程名称
this.setName(name);
}public voidrun() {super.run();while(count>0) {
count--;
System.out.println("由"+this.currentThread().getName()+"计算,count="+count);
}
}
}
packageFirst;public classTest {public static voidmain(String[] args) {
MyThread a= new MyThread("A");
MyThread b= new MyThread("B");
MyThread c= new MyThread("C");
a.start();
b.start();
c.start();
System.out.println("main");
}
}
(2)共享数据
packageFirst;public class MyThread extendsThread {private int count = 5;public voidrun() {super.run();
//此实例不要用for语句,因为使用同步后其他线程就得不到运行的机会了
count--;
System.out.println("由"+this.currentThread().getName()+"计算,count="+count);
}
}
packageFirst;public classTest {public static voidmain(String[] args) {
MyThread myThread= newMyThread();
Thread a= new Thread(myThread,"A");
Thread b= new Thread(myThread,"B");
Thread c= new T