多线程的方法
Tread中常用的方法
- start():启动当前线程;调用当前线程的run()
- run():通常需要重写Thread类中的方法,将创建的线程要执行的操作声明在此方法中
- currentThread():静态方法,返回执行当前代码的线程
- getName():获取当前线程的名字
- setName():设置当前线程的名字
- yield():释放当前cpu的执行
- join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,知道线程b完全执行完以后,线程a才结束阻塞状态。
- stop():已过时。当执行此方法时,强制结束当前线程。
- sleep(long millitime):让当前线程“睡眠”指定的millitime毫秒。在指定的millitime毫秒时间内,当前线程是阻塞状态。
- isAlive():判断当前线程是否存活
package new1;
/*
* 多线程的创建,方式一:继承Thread类
* 1.创建一个继承于Thread类的子类
* 2.重写Thread类的run()--->将此线程执行的操作声明在run()中
* 3.创建Thread类的子类的对象
* 4.通过此对象调用start()
*
* 例子:遍历100以内的所有偶数
* */
//1.创建一个继承于Thread类的子类
class MyThread1 extends Thread {
//2.重写Thread类的run()
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class MyThread2 extends Thread {
//2.重写Thread类的run()
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
public class demo1{
public static void main(String[] args) {
//3.创建Thread类的子类对象
MyThread1 t1 = new MyThread1();
MyThread2 t2 = new MyThread2();//在启动一个线程,需要重新创建一个线程对象
//4.通过此对象调用star();先启动当前线程,然后调用当前线程的run()
t1.start();
t2.start();
for (int i = 20; i < 40; i++){
if(i%2 != 0){
System.out.println("这是主线程:"+i);
}
}
}
}
结果
这是主线程:21
这是主线程:23
Thread-1:1
Thread-1:3
Thread-1:5
Thread-1:7
Thread-1:9
Thread-1:11
Thread-1:13
Thread-1:15
Thread-1:17
Thread-1:19
Thread-0:0
Thread-0:2
Thread-0:4
Thread-0:6
Thread-0:8
Thread-0:10
Thread-0:12
Thread-0:14
Thread-0:16
Thread-0:18
这是主线程:25
这是主线程:27
这是主线程:29
这是主线程:31
这是主线程:33
这是主线程:35
这是主线程:37
这是主线程:39
匿名子类的方式
package new1;
public class demo2 {
public static void main(String[] args) {
//创建Thread的匿名子类的方式
new Thread() {
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
}.start();
new Thread() {
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
}.start();
}
}
答案
Thread-0:0
Thread-0:2
Thread-0:4
Thread-0:6
Thread-0:8
Thread-0:10
Thread-0:12
Thread-0:14
Thread-0:16
Thread-0:18
Thread-1:1
Thread-1:3
Thread-1:5
Thread-1:7
Thread-1:9
Thread-1:11
Thread-1:13
Thread-1:15
Thread-1:17
Thread-1:19
命名,获取名,与currentThread()
package new1;
public class demo2 {
public static void main(String[] args) {
MyThread3 h1 = new MyThread3();
h1.setName("线程一");
h1.start();
//给主线程命名
Thread.currentThread().setName("主线程");
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class MyThread3 extends Thread {
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
答案
主线程:1
线程一:0
线程一:2
线程一:4
线程一:6
线程一:8
线程一:10
线程一:12
线程一:14
线程一:16
线程一:18
主线程:3
主线程:5
主线程:7
主线程:9
主线程:11
主线程:13
主线程:15
主线程:17
主线程:19
另一种命名方式(利用Thread类中的构造方法命名)
package new1;
public class demo2 {
public static void main(String[] args) {
MyThread3 h1 = new MyThread3("线程一一");
//h1.setName("线程一");
h1.start();
//给主线程命名
Thread.currentThread().setName("主线程");
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class MyThread3 extends Thread {
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public MyThread3(String name){
super(name);
}
}
答案
线程一一:0
线程一一:2
线程一一:4
主线程:1
线程一一:6
主线程:3
主线程:5
线程一一:8
主线程:7
主线程:9
主线程:11
主线程:13
主线程:15
主线程:17
主线程:19
线程一一:10
线程一一:12
线程一一:14
线程一一:16
线程一一:18
yield方法
package new1;
public class demo2 {
public static void main(String[] args) {
MyThread3 h1 = new MyThread3("线程一一");
//h1.setName("线程一");
h1.start();
//给主线程命名
Thread.currentThread().setName("主线程");
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class MyThread3 extends Thread {
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
if(i%4 == 0){
yield(); //yield方法
}
}
}
public MyThread3(String name){
super(name);
}
}
答案
主线程:1
线程一一:0
主线程:3
线程一一:2
主线程:5
线程一一:4
主线程:7
主线程:9
主线程:11
主线程:13
主线程:15
主线程:17
主线程:19
线程一一:6
线程一一:8
线程一一:10
线程一一:12
线程一一:14
线程一一:16
线程一一:18
join方法
package new1;
public class demo2 {
public static void main(String[] args) {
MyThread3 h1 = new MyThread3();
h1.setName("线程一");
h1.start();
//给主线程命名
Thread.currentThread().setName("主线程");
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
if( i== 1){
try {
h1.join(); //jion方法+异常处理
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class MyThread3 extends Thread {
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
sleep
package new1;
public class demo2 {
public static void main(String[] args) {
MyThread3 h1 = new MyThread3();
h1.setName("线程一");
h1.start();
//给主线程命名
Thread.currentThread().setName("主线程");
for (int i = 0; i < 20; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class MyThread3 extends Thread {
public void run() {
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
try {
sleep(1000); //sleep方法,强制休息一秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
Java多线程:常用方法解析
本文介绍了Java中多线程的常用方法,包括start()启动线程、run()执行任务、currentThread()获取当前线程、getName()和setName()操作线程名,以及yield()、join()和sleep()等线程控制方法。通过实例解析了这些方法的使用和作用。
1万+

被折叠的 条评论
为什么被折叠?



