在Java编程中,多线程是一项重要的特性,它具有许多优点。与单线程相比,单线程只能一个程序运行,其他程序必须等待。而多线程能够支持并发执行多个程序。当需要编写能够同时执行多个功能的程序时,就需要使用Java的多线程功能。Java的多线程功能封装在线程类中,并且有多种创建和调用方法。
一、线程的创建
有两种方法可以创建线程。
第一种方法是通过继承Thread类创建线程类:
class MyClass extends Thread { public void run() { // 线程的入口点,类似于C语言中的main函数 // 源代码 } }
第二种方法是实现Runnable接口创建线程类:
class MyClass implements Runnable { public void run() { // 线程的入口点,类似于C语言中的main函数 // 源代码 } }
二、线程的调用
如果采用第一种方法创建线程类,调用方式如下:
MyClass myThread = new MyClass(); myThread.start();
如果采用第二种方法创建线程类,调用方式如下:
MyClass myThread = new MyClass(); new Thread(myThread).start();
三、线程类的变量及成员函数
变量:
- MAX_PRIORITY:线程优先级的最大值
- MIN_PRIORITY:线程优先级的最小值
- NORM_PRIORITY:线程优先级的默认值
文章来源地址https://www.toymoban.com/diary/java/359.html
成员函数:
- activeCount():返回当前活动线程数
- checkAccess():检测当前线程是否可以修改
- countStackFrames():返回线程的堆栈框架数目
- currentThread():返回当前正在执行的线程对象
- destroy():终止一个线程,不清除其他相关内容
- dumpStack():输出当前线程的堆栈使用情况(调试使用)
- enumerate(Thread[]):将当前线程组中所有活动线程复制到特定数组中
- getName():返回线程的名称
- getPriority():返回线程的优先级
- getThreadGroup():返回线程所属的线程组
- interrupt():向线程发送中断信号
- interrupted():检查线程是否被中断
- isAlive():检查线程是否处于活动状态
- isDaemon():检查线程是否是守护线程(常驻内存线程)
- isInterrupted():检查另一个线程是否被中断
- join(long):等待线程终止的毫秒数
- join(long, int):等待线程终止的毫秒数和纳秒数
- join():永远等待线程终止
- resume():恢复线程的执行
- run():线程的入口点,类似于C语言中的main函数
- setDaemon():设置线程为守护线程
- setName(String):设置线程的名称
- setPriority(int):设置线程的优先级
- sleep(long):使线程休眠指定毫秒数
- sleep(long, int):使线程休眠指定毫秒数和纳秒数
- start():启动一个线程,自动调用run函数。同时,调用start函数的线程将立即返回执行主程序
- stop():终止一个线程
- stop(Throwable):终止一个线程,可继承Throwable类
- suspend():暂停线程的执行
- toString():返回线程的字符串表示,包括名称、优先级和所属线程组
- yield():让出对CPU的控制,使其他正在等待状态的线程运行
四、同步设定
在多个函数需要使用相同资源时,不能同时执行。为了解决这个问题,Java提供了同步设定的功能。每个类可以对自己代码中不能与其他程序同时运行的部分进行同步设定。同步设定的作用是告知Java哪些代码段已经被加锁,只能单独运行。有两种方法可以实现同步设定:
1. 将函数设置为同步方式:
public synchronized void method1() { // 源代码 } public synchronized void method2() { // 源代码 }
当以上函数被设置为同步方式后,只有一个线程获得资源后才能执行。对于每个类来说,只有一个资源可以被获得,所以任何时刻只有一个线程可以运行,而其他线程则处于等待状态。
2. 在调用函数时说明需要同步:
synchronized (resource) { resource.method1(); } synchronized (resource) { resource.method2(); }
在上面的例子中,只有当某个线程获得`resource`资源后,才能执行`method1`和`method2`。函数调用结束后,资源将被释放,从而允许其他等待该资源的线程运行。
五、线程变量的安全
为了保证线程中的变量在使用时不被其他线程修改,可以将其设置为线程安全变量。这种设置可使编译器更容易进行代码优化。如果不使用线程安全变量,编译器很难区分一个线程中已被修改的变量。线程安全变量的定义方式如下:
threadsafe int ttt;
其中,`threadsafe`是线程安全变量的类型,`ttt`是变量名。常见的静态变量就是线程安全变量的典型示例。
以上是关于Java中多线程的介绍,包括线程的创建、调用方法,以及同步设定和线程变量的安全性。
通过合理运用多线程特性,可以提高程序的效率和并发处理能力,在开发Java应用时具有重要意义。
文章来源:https://www.toymoban.com/diary/java/359.html
到此这篇关于Java中的多线程:创建、调用和同步设定的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!