两种线程
- Thread类
package Thread;
import java.lang.*;
class MyThread extends Thread{
private String name;
public MyThread(String name) {
super();
this.name=name;
}
public void run() {
for(int i=0;i<10;i++) {
System.out.println("name"+this.name+"运行, "+i);
}
}
}
public class DemoThread {
/**
* thrad常用方法
* 1. public Thread CurrentThread() 返回当前运行的进程
* 2. public String getName() 返回线程的名字
* 3. public void sleep(in m) 休眠m毫秒
* 4. public void start() 启动线程
* 5. public void run() 线程的主体有jvm实现
*/
// 我们一般使用就是重写run()方法
public static void main(String[] args) {
MyThread demo0=new MyThread("线程A");
MyThread demo1=new MyThread("线程B");
demo0.start();
demo1.start();
}
}
- Runnable类
package Thread;
import java.lang.*;
class myRunnale implements Runnable {
private String name;
public myRunnale(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++)
System.out.println("name:" + this.name + ",run" + i);
}
}
public class DemoRunnable {
public static void main(String[] args) {
myRunnale demo1 = new myRunnale("thread1");
myRunnale demo2 = new myRunnale("thread2");
Thread t1 = new Thread(demo1);
Thread t2 = new Thread(demo2);
t1.start();
t2.start();
}
}
- 异同
Runnable 实现了真正意义上的资源共享
/*
*共享了mt实现的run方法
*/
MyThread mt = new MyThread();
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt) ;
t1.start();
t2.start();
- 线程的优先级
void Thread.MIN.setPriority(int grade);
先执行优先级高的线程,
优先级高的线程结束后执行优先级低的线程
10~1
10最高 - 多线程简单买票
package Thread;
import java.lang.*;
import com.sun.javafx.font.t2k.T2KFactory;
import com.sun.jndi.url.iiopname.iiopnameURLContextFactory;
class TiketSales implements Runnable {
private int ticket = 5;
public void run() {
for (int i = 0; i < 20; i++)
this.sale();
}
private synchronized void sale() {
if (this.ticket > 0) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "卖票:ticket=" + this.ticket--);
}
}
}
public class TicketSalesDemo {
public static void main(String[] args) {
TiketSales demo = new TiketSales();
Thread t1 = new Thread(demo);
Thread t2 = new Thread(demo);
Thread t3 = new Thread(demo);
t1.start();
t2.start();
t3.start();
}
}