Java多线程编程实战指南学习(一)

本文介绍了Java多线程编程的基础知识,包括进程与线程的概念,Java线程API的使用,如Thread类和Runnable接口,线程的生命周期状态,以及多线程编程的优势和风险。强调了线程安全问题和上下文切换对系统性能的影响。
摘要由CSDN通过智能技术生成

1.进程、线程与任务

进程是程序运行的实例,一个简单的java程序如下所示:

import java.util.Date;

public class SimlpeJavaApp {
   
    public static void main(String[] args) throws Exception
    {
   
        while (true)
        {
   
            System.out.println(new Date());
            Thread.sleep(1000);
        }
    }
}

进程是程序向操作系统申请资源的最小单位,线程则是进程中可独立执行的最小单位。一个进程可以包含多个线程,同一个进程中的所有线程共享该进程中的资源。

2.Java线程API简介

2.1线程的创建、运行及启动

在Java平台中创建一个线程就是创建一个Thread类的实例。线程的任务处理逻辑Thread类的run实例方法中直接实现或者通过该方法进行调用,因此run方法为线程的任务处理逻辑入口。
Thread类的start方法的作用是启动相应的线程。启动一个线程的使之是请求Java虚拟机运行相应的线程,而这个线程具体何时能够运行是由线程调度器决定的。
Thread类的两个常用构造器是Thread()和Thread(Runnable target)。
下面以创建一个处理任务为打印一行欢迎信息的简单线程为例:
以定义Thread类子类的方式创建线程

import java.lang.String;
public class WelcomeApp {
   
    public static void main(String[] args)
    {
   
        Thread welcomeThread = new WelcomeThread();
        welcomeThread.start();
        System.out.printf("1.Welcome!I'm %s.%n",Thread.currentThread().getName());
    }
}
class  WelcomeThread extends Thread
{
   
    @Override
    public void run()
    {
   
        System.out.printf("2.Welcome!I'm %s.%n",Thread.currentThread().getName());
    }
}

其输出为
1.Welcome!I’m main.
2.Welcome!I’m Thread-0.

以创建Runnable接口实例的方式创建线程

public class WelcomeApp1 {
   
    public static void main(String[] agrs)
    {
   
        Thread welcomeThread = new Thread(new WelcomeTask());
        welcomeThread.start();
        System.out.printf("1.Welcome!I'm %s.%n",Thread.currentThread().getName());
    }
}
class WelcomeTask implements Runnable{
   
    @Override
    public void run()
    {
   
        System.out.printf("2.Welcome!I'm %s.%n",Thread.currentThread().getName());
    }
}

运行结果为
1.Welcome!I’m main.
2.Welcome!I’m Thread-0.
在多次运行之后,运行结果也可能为
2.Welcome!I’m Thread-0.
1.Welcome!I’m main.、
无论采用什么方法创建线程,当线程的run方法执行结束,相应线程也就结束了。线程属于一次性用品,无法调用一个已结束线程的start方法使其重新运行。
Java平台中任意一段代码总是由确定的线程负责执行的,这个线程相应的称为这段代码的执行线程。同一段代码可以被多个线程执行。而当前线程则是相对的,即该娘层次上的当前线程。
线程的run方法总是由虚拟机调用的,虽然也可以在代码中直接调用,但是直接调用的结果一般都不理想。
如以下代码块所示,应用代码直接调用线程run方法(应避免这么做)

public class WelcomeApp2 {
   
    public static void main(String [] args)
    {
   
        Thread welcomeThread = new Thread(new Runnable() {
   
            @Override
            public void run() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值