本文共 4201 字,大约阅读时间需要 14 分钟。
线程是比进程还要小的运行单位,一个进程包含多个线程。
两种方式:
Thread是一个线程类,位于java.lang包下
Thread类的常用方法
继承Thread类的方式创建线程类,重写run方法:
package com.imooc.thread;class MyThread extends Thread{ public void run(){ System.out.println(getName()+"该线程正在执行!"); }}public class ThreadTest{ public static void main(String[] args){ System.out.println("主线程1"); MyThread mt = new MyThread(); mt.start(); System.out.println("主线程2"); }}
Runnable创建线程:
为什么要实现Runnable接口?因为:
package com.imooc.thread;class PrintRunnable implements Runnable{ @Override public void run() { int i = 1; while (i<=5){ System.out.println(Thread.currentThread().getName()+"正在运行"); i++; } }}public class ThreadTest{ public static void main(String[] args){ PrintRunnable pr = new PrintRunnable(); Thread t1 = new Thread(pr); t1.start(); Thread t2 = new Thread(pr); t2.start(); }}
public static void sleep(long millis)
参数单位:毫秒
示例:class MyThread implements Runnable{ @Override public void run() { for(int i = 0; i<10;i++){ System.out.println(Thread.currentThread().getName()+i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}public class Test { public static void main(String[] args){ MyThread m = new MyThread(); Thread t = new Thread(m); t.start(); }}
调用sleep时需要捕获异常。
public final void join()
join方法的参数为毫秒,代表:超过此时间交出资源使用权。
示例:
class MyThread implements Runnable{ @Override public void run() { for(int i = 0; i<10;i++){ System.out.println(Thread.currentThread().getName()+i); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }}public class Test { public static void main(String[] args){ MyThread m = new MyThread(); Thread t = new Thread(m); t.start(); try { t.join(1000); } catch (InterruptedException e) { e.printStackTrace(); } for(int j = 0; j<10;j++){ System.out.println("主线程"); } }}
测试代码:
class MyThread implements Runnable{ private String name; public MyThread(String name){ this.name = name; } @Override public void run() { for(int i = 0; i<10;i++){ System.out.println(Thread.currentThread().getName()+i+name); } }}public class Test { public static void main(String[] args){ int i = Thread.currentThread().getPriority(); MyThread m = new MyThread("Allen"); Thread t = new Thread(m); MyThread m1 = new MyThread("ming"); Thread t1 = new Thread(m1); t.setPriority(Thread.MAX_PRIORITY); t1.setPriority(Thread.MIN_PRIORITY); int y = t.getPriority(); int y1 = t1.getPriority(); System.out.println("Allen线程优先级"+y); System.out.println("ming线程优先级"+y1); t.start(); t1.start(); }}
多线程运行时的问题:
使用synchronized
关键字加锁。同一时刻只能单个操作。
synchronized关键字可以用在:成员方法、静态方法、语句块
public synchronized void F(){}public static synchronized void F(){}synchronized (){}
Java中的线程通信和Python中的差不多,通过中间队列类存储,由消费者和生产者负责放入和取出。
wait方法:中断方法的执行,使线程等待
notify方法:唤醒处于等待的某一个线程 notifyAll方法:唤醒处于等待的全部线程创建线程的两种方式:
new Thread().start()
new Thread(new MyRunable()).start()
线程的5种状态:
sleep、join、wait、notify、notifyAll方法:
线程优先级:
线程同步:
synchronized关键字,可以用在:成员方法、静态方法、语句块。上述文章如有帮助记得点赞呦,关注后第一时间获得最新笔记,持续更新~
转载地址:http://pndgo.baihongyu.com/