创建多线程的第一种方式:继承java.lang.Thread类
注意:1.一个线程只能执行一次start()
2.不能通过Thread实现类对象的 run()去启动一个线程
3.增加加一个线程,需要新创建一个线程的对象
Thread类的常用方法:
1.start():启动线程并执行相应的 run()方法
2.run():子线程要执行的代码放入run()方法中
3.currentThread():静态的,调取当前的线程
4.getName():获取此线程的名字
5.setName():设置此线程的名字
6.yield():调用此方法的线程释放当前的CPU执行权
7.join():在A线程中调用B线程的join()方法,表示:当执行到此方法,
A线程停止执行,直到B线程执行完毕,
A线程再接着join()之后的代码执行
8.isAlive():判断当前线程是否还存活
9.sleep(long m):显示的让当前线程睡眠m毫秒
10.线程通信:wait() notify() notifyAll()
设置线程的优先级:
getPriority():返回线程优先值
setPriority(int newPriority):改变线程的优先级
继承Thread类的匿名类的对象
TestTh
package com.aff.thread; public class TestTh { public static void main(String[] args) { //继承Thread类的匿名类的对象 new Thread() { public void run() { for (int i = 0; i < 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } }.start(); new Thread() { public void run() { for (int i = 0; i < 100; i++) { if (i % 2 != 0) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } }.start(); } }
创建多线程的第二种方式:通过实现的方式(只要和线程相关都离不开Runnable)
TestThread1
package com.aff.thread; public class TestThread1 { /* 创建线程的方式二:通过实现的方式(只要和线程相关都离不开Runnable) * * 对比一下继承的方式 vs 实现的方式 * 实现的方式好些:①避免了java单继承的局限性 * ②如果多个线程要操作同一份资源(或数据),更适合使用实现的方式 */ public static void main(String[] args) { // 3.创建一个Runnable接口实现类的对象 PrintNum p = new PrintNum(); // 想要启动一个多线程, 必须调用start() // 4.将此对象作为形参传递给Thread类的构造器中,创建Thread类的对象,此对象即为一个线程 Thread t1 = new Thread(p); // 5.调用start()方法:启动线程执行run() t1.start();// 启动线程: 执行Thread对象生成时,构造器形参的,对象的run()方法 // 在创建一个线程 Thread t2 = new Thread(p); t2.start(); } } // 1.创建一个实现Runnable接口的类 class PrintNum implements Runnable { // 2.实现接口实现方法 @Override public void run() { for (int i = 0; i < 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } }