Java多线程入门(一)

阅读: 评论:0

Java多线程入门(一)

Java多线程入门(一)

会当凌绝顶,一览众山小

| @Author:TTODS

目录

    • Java线程实现多线程的两种方式
    • 线程中的相关方法

Java线程实现多线程的两种方式

  • 继承Thread类,重写run方法
//MyThread.java文件
//MyThread类继承Thread类
public class MyThread extends Thread{//重写run方法@Overridepublic void run() {for(int i=0;i<500;i++) {System.out.println("我是子线程,i="+i+"(>_<)!");}}
}
//Test1.java文件
//Test1类,用于测试
public class Test1 {public static void main(String[] args) {//实例化子线程对象MyThread mt = new MyThread();//启动子线程,一定是使用start方法,而不是run方法,调用run方法为普通的方法调用,不能达到多线程的效果mt.start();for(int i=0;i<500;i++) {System.out.println("(>_<)!我是主线程,i="+i);}}
}

运行结果

  • 实现Runnable接口(实现接口中的run方法),在用Runnable实现类初始化Thread对象
//MyRunnable.java文件
//MyRunnable类实现Runnable接口
public class MyRunnable implements Runnable{//实现接口中的run方法public void run() {for(int i=0;i<1000;i++)System.out.println("\(>_<)/我是MyRunnable,i="+i);}
}
//Test1.java文件,用于测试
public class Test1 {public static void main(String[] args) {//实例化Runnable接口的实现类MyRunnable mr = new MyRunnable();//使用Runnable接口实现类的对象初始化Thread对象Thread thread = new Thread(mr);//使用start方法启动线程thread.start();for(int i=0;i<500;i++) {System.out.println("(>_<)!我是主线程,i="+i);}}
}

运行结果

线程中的相关方法

  • setPriority()
    设置线程优先级,可设置成1-10,默认是5
//MyThread.java文件
//MyThread类继承Thread类,下面的方法都会使用此类
public class MyThread extends Thread{public MyThread() {super();}//构造函数,为线程取名字MyThread(String name){this();setName(name);}//重写run方法@Overridepublic void run() {for(int i=0;i<500;i++) {System.out.println("我是"+getName()+",i="+i+"(>_<)!");}}
}
//SetPriorityTest.java文件
public class SetPriorityTest {public static void main(String[] args) {MyThread mt1 = new MyThread("线程1");MyThread mt2 = new MyThread("线程2");mt1.setPriority(1);//将 子线程1的优先级设为1mt2.setPriority(10);//将 子线程2的优先级设为10//启动两个线程mt1.start();mt2.start();}
}

运行结果

  • sleep()
    使正在运行的线程“睡眠”一段时间,将CPU交给其他线程。
//SleepTest.java文件import java.util.Date;
public class SleepTest {public static void main(String[] args) {MyTime t = new MyTime();t.start();}
}//子线程类
class MyTime extends Thread{
//重写run方法,作用是每秒输出一次当前的时间@Overridepublic void run() {// TODO 自动生成的方法存根while(true) {System.out.println(new Date());try {//sleep方法,让当前线程“睡”一段时间,参数是毫秒Thread.sleep(1000);} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}
}

运行结果

  • join()
    将一个线程加入到另外一个线程中,是两个线程从交替执行变为循序执行。
//JoinTest.java文件
public class JoinTest {public static void main(String[] args) {MyThread mt = new MyThread("子线程");//启动子线程mt.start();//主线程第一个循环输出for(int i=0;i<100;i++) {System.out.println("这里是主线程,i="+i);}System.out.println("join");//使用join,try {mt.join();} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}//主线程的第二次循环输出for(int i=0;i<100;i++) {System.out.println("这里是主线程,i="+i);}}
}

运行结果
主线程的第一个循环输出(使用join前),主线程与子线程同时进行,主线程的第二个循环输出(使用join后),主线程等待子线程结束才继续运行。

  • yield()
    将线程由运行状态变为可运行状态,是其他线程获得运行机会,但不保证可以转让
//YieldTest.java文件
public class YieldTest {public static void main(String[] args) {MyThread mt = new MyThread("子线程");//启动子线程mt.start();for(int i=0;i<400;i++) {System.out.println("主线程,i="+i);//每当i可以被10整除的时候,调用yield()方法;if(i%10==0) {Thread.yield();System.out.println("---------yield----------");}}}
}

运行结果

  • interrupt()
    interrupt方法可以使正在sleep的线程,“醒”过来。
//InterruptTest.java文件
public class InterruptTest {public static void main(String[] args) {SleepThread st = new SleepThread();//启动子线程st.start();//等待子线程1秒,确保子线程的台词在主线程前面(>_<)!try {Thread.sleep(1000);} catch (InterruptedException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}System.out.println("500年?你看我数五秒就叫醒这个偷懒的家伙");for(int i=1;i<=5;i++) {System.out.println(i);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}st.interrupt();}
}
//子线程类
class SleepThread extends Thread{@Overridepublic void run() {System.out.println("子线程:我要先睡500年");try {//让线程sleep一个很长很长的时间Thread.sleep(1000000000);} catch (InterruptedException e) {//捕获到中断异常时的异常处理System.out.println("子线程:谁啊!这么快就吵醒我!好吧我先去工作");}//sleep结束后要运行的代码for(int i=0;i<100;i++) {System.out.println("子线程:i="+i);}}
}

运行结果


- THE END -

本文发布于:2024-02-04 19:01:15,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170714258458595.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:多线程   入门   Java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23