方法1:Thread类
继承Thread类
start方法启动
方法2:Runnable接口
实现接口class MyRun implement Runnable....
重写run方法
创建一个线程MyRun p = new MyRum
启动线程运行new Thread(p).start()
方法3:Callable接口(了解就行)
实现接口
重写call方法,需要抛出异常
创建目标对象
创建执行服务:ExecutorService ser =Executors.newFixedThreadPool(1);
提交执行:Future
获取结果:boolean r1 =result1.get()
关闭服务:ser.shutdownNow();
推荐使用类实现Runnable接口,而不继承Thread类,因为java是单继承的。
休眠:sleep(参数:单位毫秒)
在线程执行时暂停一会。
礼让:yield()
在多个线程执行时,允许别的线程与它争抢CPU资源
强制执行:join()
在多个线程执行时,强制占用CPU资源
线程.currentThread.getName() 获得线程名
NEW 尚未启动
RUNNABLE 正在运行
BLOCKED 等待锁的阻塞状态
WAITING 等待另一个线程执行特定动作
TIMED_WAITING 等待指定时间
TERMINATED 已经结束
线程.getState() 获得线程当前状态
MIN_PRIORITY = 1
MAX_PRIORITY = 10
NORM_PRIORITY = 5
用getPriority()获取进程优先级
用setPriority()改变进程优先级
虚拟机需要等待用户线程结束
不需要等待守护线程结束
当用户线程结束时,守护线程自己就结束了
线程.setDaemon(true)改变为守护线程,默认false为用户线程
synchronized
方法一:synchronized方法
public synchronized void 方法名(参数){...}
该方法会锁住当前对象this
方法二:synchronized代码块
synchronized(对象){代码块}
该方法可以锁任何变化的对象
lock
用法:
private final ReentrantLock lock =new ReentrantLock();
run()方法里
try{
lock.lock();//加锁
...
}finally{
lock.unlock();//解锁
}
wait() 表示线程一直等待直到其他线程通知
wait(long timeout) 指定等待的毫秒数
notify() 唤醒一个处于等待状态的进程
notifyAll() 唤醒同一个对象上所有调用wait()方法的线程,优先级高的先调度
使用以上方法就是管程法
多加一个Boolen类型的标志位作为判断是否等待,就是信号灯法
用一个类似池子的东西存放一堆线程,避免线程重复创建和销毁。
ExecutorService:真正的线程池接口。常见子类ThreadPoolExecutor
? void execute(Runnable command):执行任务/命令,没有返回值,一般用来执行Runnable
?
? void shutdown():关闭连接池
Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池。
//创建服务,创建线程池
ExecutorService service = Executors.newFixedThreadPool(线程数)
//执行
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
//关闭连接
service.shutdown();
总结
//实现多线程
//1.继承Thread类
public class ThreadNew{
public static void main (String[] args){
new MyThread1().start();
new Thread(new MyThread2()).start();
FutureTask<Integer> futureTask = new FutureTask();
new Thread(futureTask).start();
try {
Integer integer = futureTask.get();
System.out.println(integer);
}catch(InterruptedException e){
e.printStackTrace();
}catch(ExecutionException){
e.printStackTrace();
}
}
}
class MyThread1 extends Thread{
@Override
public void run(){
System.out.println("MyThread1");
}
}
//2.实现Runnable接口
class MyThread2 implements Runnable{
@Override
public void run(){
System.out.println("MyThread2");
}
}
//3.实现Callable接口
class MyThread3 implements Callable<Integer>{
@Override
public Integer call() throws Exception{
System.out.println("MyThread3");
return 100;
}
}
原文:https://www.cnblogs.com/wing-of-dream/p/14493217.html