linux怎么查看本机内存大小
280
2022-12-30
新手了解java 多线程基础知识(一)
目录1.基本概念2.多线程的创建3.Thread类方法介绍总结
1.基本概念
程序、进程、线程
程序(program)是为完成特定任务、用某种语言编写的一组指令的集 合。即指一段静态的代码,静态对象。
进程(process)是程序的一次执行过程,或是正在运行的一个程序。是 一个动态的过程:有它自身的产生、存在和消亡的过程——具有生命 周期。可以理解为一个正在运行的软件。
线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行 路径。可以理解为一个软件的功能。
多线程程序的优点:
提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
提高计算机系统CPU的利用率。
改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理 解和修改。
2.多线程的创建
在java中我们可以使用java.lang.Thread类来实现 ,要想我们的类具有多线程的功能,需要让我们的类去继承Thread类,然后重写run()方法,并调用 start()方法来启动多线程。
示例 1:
public class MyThread extends Thread{
public void run(){
for (int i = 0; i < 50; i++) {
System.out.println("MyThread:"+i);
}
}
}
public class MyThreadTest{
public static void main(String[] args){
Thread t1 = new MyThread();
t1.start();
for (int i = 0; i < 20; i++) {
System.out.println("world=====" + i);
}
}
}
说明:创建一个Java类继承Thread类,并重写父类Thread中的run方法,在run方法中写具体的多线程业务。创建线程类的对象,并调用start方法启动多线程。
**注意:**多线程的启动调用的是start方法,在jvm底层中start方法内部会调用run方法。
一个对象只需要调用一次start()方法,如果多次调用则会抛出异常“IllegalThreadStateException”。
示例 2:
public class MyRunnable implements Runnable {
public void run() {
for (int i = 0; i < 50 ; i++) {
System.out.println( "MyRunnable:"+i);
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
Thread thread = new Thread( new MyRunnable());
thread.start();// 只有调用Thread类中的start()方法才可以实现多线程
for (int i = 0; i < 50; i++) {
System.out.println("main:" + i);
}
}
}
说明:
编写一个类,实现Runnable接口;
重写run()方法;
根据Runnable子类对象来创建Thread对象;
通过Thread对象调用start()方法来启动多线程;
总结:
继承Thread:重写run()方法,业务代码在run()中。
实现Runnable:线程代码存在接口的子类的run方法。
通过Callable和线程池的方式创建线程。
**提示:**在应用中我们如果可以使用Runable接口那么就尽量使用,这样可以避免Java单继承的局限。
3.Thread类方法介绍
1)currentThread():返回当前正在执行的线程对象的引用。
2)getName():返回当前线程的名称
3)isAlive():判断当前线程是否存活
4)isDeaomon():判断线程是否为守护线程
5)join():在当前线程中引入另一个线程,而当前线程会被阻塞
6)sleep():让当前线程进入睡眠状态
7)yield():让当前线程放弃CPU的执行权,重新进入排队,与其他线程平等争夺CPU执行。
8)interrupt() 中断线程 9)interrupted() 如果当前线程已经中断,则返回 true;否则返回 false。
示例:
public class ThreadTest {
public static void main(String[] args) {
//创建线程并开启线程1
Thread thread = new MyThread();
thread.start();
//创建线程并开启线程2
Thread thread1 = new Thread(new MyRunnable());
thread1.start();
//创建线程并开启线程3
MyCallable myCallable = new MyCallable();
FutureTask futureTask = new FutureTask(myCallable);
new Thread(futureTask).start();
for (int i = 0; i < 100; i++) {
if (i== 50){
//在main线程中当i=50加如thread线程,会在thread执行完后才会继续执行main线程剩下的
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("main:"+i);
}
}
}
public class MyThread extends Thread{
public void run(){
for (int i = 0; i < 100; i++) {
// void interrupt() 中断线程 可以理解为线程中断状态有 true | BEbvofalse,每一次调用就是修改状态为true
//static boolean interrupted() 如果当前线程已经中断,则返回 true;否则返回 false。
Thread.currentThread().interrupt();
if (Thread.interrupted()){
System.out.println("Thread interrupted");
}
// static currentThread() 返回对当前正在执行的线程对象的引用
//String getName() 返回该线程的名称。
//Thread.currentThread().getName() 获取当前线程对象的名称
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("MyRunnable"+i);
//每次执行完打印让线程休眠1秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
BEbvo e.printStackTrace();
}
}
}
}
public class MyCallable implements Callable {
@Override
public Object call() throws Exception {
for (int i = 0; http://i < 100; i++) {
System.out.println("MyCallable:"+i);
}
return null;
}
}
总结
本篇文章就到这里了,希望对你有所帮助,也希望你能够多多关注我们的更多内容!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~