Java 多线程基础
来源:互联网 发布:网页版淘宝网 电脑版 编辑:程序博客网 时间:2024/06/07 23:29
在Java开发中,我们经常会用到多线程来解决一些异步的问题,多线程属于Java的重点与难点,下面我们就一步一步的讲解Java中的多线程
下面先讲一下进程与线程的区别:
一、进程与线程:
一般来说,一个应用程序对应一个进程,而在一个进程中,会有一个或者多个线程,线程相当于子任务。这样可以最大限度地利用多核cpu。
需要注意以下几点:
1、在Java中,使用 public static void main(String[] args) { } 进行启动,jvm会创建一个name为main的线程来执行代码。
2、注意,多线程的情况下线程的执行是无序的。
3、jvm创建的name为main的只是一个普通的线程,一个java程序对应一个进程,进程结束在于里面的线程是否都结束,所以即使jvm创建的name为main线程结束了,如果还有其它的线程,那么此java程序也不会停止。所以当程序出现 Process finished with exit code 0 这个结束语时,那么一定是java进程中所有的线程都运行完毕。
二、如何实现多线程 :
实现多线程的方式一种是继承Thread类,一种是自己实现Runnable接口,一般来说推荐自己实现Runnable接口,这样可以做到多个线程执行同一个Runnable代码块。
三、Thread类中的方法:
1、setName()方法:
设置线程的名称,注意多个线程的名称是可以重复的:
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.setName("myThread");
thread.start();
2、start()方法:
此方法即是通知系统的‘线程规划器’来执行对应的代码块,注意只有在代码中调用start()方法,系统才会生成新的线程来执行对应的代码块,否则直接调用run()方法的话,不会生成新的线程,还会在当前的线程。
3、currentThread()方法:
currentThread()方法可以得到当前的线程:
Thread.currentThread()
4、isAlive()方法:
判断此线程是否在执行过程中,如果在执行过程中,返回true,如果没有,返回false.
可以看以下代码 ,其中新创建一个线程,start()之前,isAlive()为false,在线程执行过程中,isAlive()为true。当线程执行完成之后,isAlive()为false。
public class Test2 { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); System.out.println("isAlive():" + thread.isAlive()); thread.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("isAlive():" + thread.isAlive()); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("isAlive():" + thread.isAlive()); }}public class MyRunnable implements Runnable{ @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }}
5、sleep()方法:
传入一个值n,单位为ms值,线程会停止n ms。
6、getId()方法:
返回此线程的唯一Id,每个线程的Id都是系统生成的,是线程安全自增的,所以线程之后Id肯定是不同的。
四、线程的停止:
java中有三种方式退出正在运行的线程:
1.1、使用退出标志,使线程正常退出,也就是run方法完成后线程停止。
1.2、使用stop方法强行停止线程,但是不推荐使用此方法,因为和stop suspend resume一样,都是过期作废的方法。使用这些方法可能导致不可预料的结果
1.3、使用interrupt()方法中断线程
下一节我们会详细的讲述Thread在interrupt()中如何退出线程
- Java基础/Java多线程
- Java基础-多线程基础篇
- java多线程基础
- Java多线程编程基础
- java多线程开发基础
- Java多线程基础
- Java -- 多线程技术基础
- 【java】多线程基础
- Java基础:多线程
- Java语言基础:多线程
- Java语言基础:多线程
- Java语言基础:多线程
- java多线程基础分析
- Java多线程编程基础
- java 多线程基础
- Java基础_多线程
- Java多线程基础
- java多线程基础
- 自己模拟strlen库函数写的功能函数my_strlen实现strlen的功能,完整代码
- hdu 3652(数位dp)
- Java其他
- LeetCode
- 平衡小车之速度
- Java 多线程基础
- ZooKeeper学习——概述篇
- 杭电测试题C语言
- UVA10791 Minimum Sum LCM
- WinSCP连接VMware虚拟机被拒绝
- VUE+WebPack游戏设计:实现盒子爆破效果和界面美化
- 接口与抽象类的异同之处
- 在Github上面搭建一个自己域名的Hexo博客
- TCP/IP五层模型的协议