用Thread实现线程
public class Text {
public static void main(String[] args) {
PrintRunnable printRunnable1=new PrintRunnable();
printRunnable1.start();
}
}
class PrintRunnable extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"正在运行");//获得当前线程的名字
}
}
Thread的常用构造方法
用Runnable实现线程
public class Text {
public static void main(String[] args) {
PrintRunnable printRunnable1=new PrintRunnable();
Thread thread1=new Thread(printRunnable1);//因为Runnable中只有run方法,为了调用start方法,把他放进Thread对象中,所以Thread的构造函数中有穿Runnable的类型的参数
thread1.start();
PrintRunnable printRunnable2=new PrintRunnable();
Thread thread2=new Thread(printRunnable2);
thread2.start();
}
}
class PrintRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"正在运行");//获得当前线程的名字
}
}
Runnable中只有run方法没有别的方法。
join方法
等待加入的方法执行完以后再去执行自己的方法
public class Text {
public static void main(String[] args) {
PrintRunnable printRunnable1=new PrintRunnable();
Thread thread1=new Thread(printRunnable1);
thread1.start();
try {
thread1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程执行完成!");
}
}
class PrintRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
System.out.println(Thread.currentThread().getName()+"正在运行");//获得当前线程的名字
}
}
}
结果
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
Thread-0正在运行
主线程执行完成!
public class Text {
public static void main(String[] args) {
PrintRunnable printRunnable1=new PrintRunnable();
Thread thread1=new Thread(printRunnable1);
thread1.start();
try {
thread1.join(1);//设置加入的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程执行完成!");
}
}
class PrintRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i <100 ; i++) {
System.out.println(Thread.currentThread().getName()+"正在运行第"+i+"次");//获得当前线程的名字
}
}
}
结果
Thread-0正在运行第0次
…
Thread-0正在运行第36次
主线程执行完成!
Thread-0正在运行第37次
…
Thread-0正在运行第99次
设置线程的优先级
优先级从1–10,1的最低,10的最高
public class Text {
public static void main(String[] args) {
PrintRunnable printRunnable1=new PrintRunnable();
Thread thread1=new Thread(printRunnable1);
System.out.println("thread1线程当前优先级:"+thread1.getPriority());
thread1.currentThread().setPriority(Thread.MAX_PRIORITY);//这里也可以输入10
System.out.println("thread1线程当前优先级:"+thread1.getPriority());
System.out.println("主线程的优先级:"+Thread.currentThread().getPriority());
thread1.start();
System.out.println("主线程执行完成!");
}
}
class PrintRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"正在运行第");//获得当前线程的名字
}
}
结果
thread1线程当前优先级:5
thread1线程当前优先级:10
主线程的优先级:10
主线程执行完成!
Thread-0正在运行
synchronized
synchronized 对多个线程共同操作的属性让某一线程在操作时只能自己访问
public synchronized void name(){}
public static synchronized void name(){}
synchronized (obj){}
线程的等待和结束
wait() 使线程进入等待状态
notify() 唤醒某一个等待的线程,使其等待结束
notifyAll() 唤醒所有处于等待的线程,使他们等待结束