Thread类
/**
* 1、编写一个普通类,然后去继承Thread这个父类
* 2、子类去override Run方法(运行线程)(JVM自动调用)
* 3、实例化当前对象,用对象的引用去掉用start方法(开启一个线程)
*
*
*/
public class MyThread extends Thread {
private String type;
public MyThread(String type){
this.type=type;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<=10;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(type+"="+Thread.currentThread().getPriority());
}
}
//main是程序运行入口,同时也是一个主线程
public static void main(String[] args) {
// TODO Auto-generated method stub
//Thread.currentThread().getName()
//获取当前这个线程的名字
//getPriority获取线程的优先级
for(int i=1;i<=30;i++){
System.out.println("main="+Thread.currentThread().getPriority());
}
MyThread mt1=new MyThread("线程A");
// mt.run();
mt1.start();
//不能同时利用同一个引用重复调用start方法
// mt.start();
MyThread mt2=new MyThread("线程B");
mt2.start();
}
}
runnable接口
/**
*
*1、编写一个普通类,实现Runnable接口
*2、覆盖接口中的Run方法
*3、实例化当前这个接口的实现类,同时还要实例化Thread这个类
*4、因为实现Runnable这个接口的类,不能去调用start方法,
* 所以需要将实现类的实例名传递给Thread有参构造,
*5、通过Thread实例名去调用start方法
*
*/
public class MyRunnable implements Runnable{
private String type;
public MyRunnable(String type){
this.type=type;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<=10;i++){
System.out.println(type+"="+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyRunnable mr1=new MyRunnable("线程A");
Thread th1=new Thread(mr1);
th1.start();
MyRunnable mr2=new MyRunnable("线程B");
Thread th2=new Thread(mr2);
th2.start();
}
}
购票实例, 假设有5个窗口共5张票。
public class ThreadApp extends Thread{
//一共为5张票
private int type=5;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<=50;i++){
if(type>0){
System.out.println(Thread.currentThread().getName()+"卖出="+type--);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadApp ta1=new ThreadApp();
ta1.start();
ThreadApp ta2=new ThreadApp();
ta2.start();
ThreadApp ta3=new ThreadApp();
ta3.start();
}
}
运行发现卖了15张票。查看API 发现Thread类是不共享本类数据的。所以只能实现Runnable接口
public class RunnableApp implements Runnable{
//一共为5张票
private int type=5;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<=50;i++){
if(type>0){
System.out.println(Thread.currentThread().getName()+"卖出="+type--);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
RunnableApp ta1=new RunnableApp();
new Thread(ta1).start();
new Thread(ta1).start();
new Thread(ta1).start();
}
}