线程操作API

currentThread

1. Thread.currentThread方法

Thread的静态方法currentThread方法可以用于获取运行当前代码片段的线程。
Thread current = Thread.currentThread();

 1 /**
 2  * 获取当前代码块的线程
 3  * @author Administrator
 4  *
 5  */
 6
 7 class TestThreadDemo4{
 8     public static void main(String[] args) {
 9         /*
10          * 当程序运行起来时 Os 会启动一个进程来运行
11          * JVM ,而进程启动后会创建一个线程,用这个线程来运行Main方法
12          */
13         //这里获取的是运行main方法的线程
14         Thread t =Thread.currentThread();
15         System.out.println("运行main方法的线程是:"+t);
16
17         //main 方法中调用
18         testCurrent();
19         //创建线程
20         Thread t1 =new Thread(){
21             @Override
22             public void run() {
23                 super.run();
24                 System.out.println("运行T1线程是:"+Thread.currentThread());
25                 testCurrent();
26             }
27         };
28         t1.start();
29
30
31     }
32     /**
33      * 输出调用当前方法的线程
34      */
35     public static void testCurrent(){
36         System.out.println("运行testCurrendt方法的线程是:"+Thread.currentThread());
37     }
38 }

运行main方法的线程是:Thread[main,5,main]
运行testCurrendt方法的线程是:Thread[main,5,main]
运行T1线程是:Thread[Thread-0,5,main]
运行testCurrendt方法的线程是:Thread[Thread-0,5,main]

2. 获取线程信息

Thread提供了 获取线程信息的相关方法:

long getId():返回该线程的标识符 全局唯一的 不能重复
String getName():返回该线程的名称
int getPriority():返回线程的优先级
Thread.state getState():获取线程的状态
boolean isAlive():测试线程是否处于活动状态
boolean isDaemon():测试线程是否为守护线程
boolean isInterrupted():测试线程是否已经中断

 1 /**
 2  * 获取线程信息的相关方法
 3  * @author Administrator
 4  *
 5  */
 6 class TeatThreadDemo{
 7     public static void main(String[] args) {
 8         //获取调用main方法的线程
 9         Thread main =Thread.currentThread();
10         System.out.println("ID:"+main.getId());
11         System.out.println("name:"+main.getName());
12         System.out.println("优先级:"+main.getPriority());
13         System.out.println("状态:"+ main.getState());
14         System.out.println("是否活动:"+ main.isAlive());
15         System.out.println("是否为守护进程"+ main.isDaemon());
16         System.out.println("是否被中断:"+main.isInterrupted());
17     }
18 }

3. 线程优先级

线程的切换是由线程调度控制的,我们无法通过代码来干涉,但是我们可以通过提高线程的优先级来最大程度的改善线程获取时间片的几率。
线程的优先级被划分为10级,值分别为1-10,其中1最低,10最高。线程提供了3个常量来表示最低,最高,以及默认优先级:
Thread.MIN_PRIORITY,
Thread.MAX_PRIORITY,
Thread.NORM_PRIORITY
设置优先级的方法为:
void setPriority(int priority)

时间: 2024-10-16 14:31:34

线程操作API的相关文章

线程同步API

头文件:<pthread.h> 编译记得加 -lpthread库 1:互斥锁(mutex) 数据类型:pthread_mutex_t 操作API: // 初始化一个互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t attr); or mutex = PTHREAD_MUTEX_INITIALIZER; // 销毁一个互斥锁 int pthread_mutex_destory(pthread_

iOS子线程操作UI问题检查

iOS开发中,因为大部分函数都不是线程安全的,所以UI子线程中操作UI是非常危险的事,但是有时候因为开发者经验不足,不知道子线程中不能UI,或者知道但是写代码的时候没注意,或者不知道那些函数操作UI了(比如UITableView的reload函数),造成这个问题时常发生,防不胜防,而且iOS不像安卓,一旦子线程中操作UI就直接崩溃,iOS中操作UI只是有可能崩,导致问题经常不好重现,而且经常奔溃堆栈是乱的,找不到出错的地方在哪儿,十分头疼. 本人写了一个简单的线程检查ui操作的库,当子线程操作u

线程池 API (转)

文档原始地址 目录 线程池概述 线程池对象 回调环境对象 工作对象 等待对象 计时器对象 I/O 完成对象 使用清理组简化清理 回调实例 API 随着 Windows Vista® 的发布和 Windows Server® 2008 的即将问世,Microsoft 为托管应用程序的开发人员提供了改进的 Windows® 平台,它包含多种新技术,使得令原本 Windows 开发人员从中受益的改进能被广为利用.例如,自从 Windows 2000 发布以来,已是该平台组成部分的线程池组件经历了一次完

线程属性API

数据类型:pthread_attr_t 操作API: // 初始化线程属性 int pthread_attr_init(pthread_attr_t *attr);// 初始化为系统支持的所有属性的默认值 // 销毁线程属性 int pthread_attr_destroy(pthread_attr_t *attr);// 回收初始化时给此属性分配的资源 // 设置分离线程属性(分离线程终止时由系统回收线程资源,而一般线程需要pthread_join(pthread_t)函数来回收资源) int

Html5 学习系列(四)文件操作API

原文:Html5 学习系列(四)文件操作API 引言 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或者跨浏览器.跨设备等情况下实现统一的表现,从另外一个角度来说就是让我们的web应用依赖了第三方的插件,而不是很独立,不够通用.在HTML5标准中,默认提供了操作文件的API让这一切直接标准化.有了操作文件的API,让我们的Web应用可以很轻松的通过JS来控制文件的读取.写入.文件夹.文件等一系列的操作,

C#跨线程操作控件的最简单实现探究

随着程序复杂度的提高,程序不可避免会出现多个线程,此时就很可能存在跨线程操作控件的问题. 跨线程操作UI控件主要有三类方式: 1.禁止系统的线程间操作检查.(此法不建议使用) 2.使用Invoke(同步)或者BeginInvoke(异步).(使用委托实现,并用lambda表达式简化代码) 3.使用BackgroundWorker组件.(此法暂不介绍,详情可见文末的参考资料) 先看一个跨线程操作失败的例子: 新建一个Winform窗口程序项目,拖一个button1和label1控件到Form1窗体

java线程操作范例

一:线程操作范例(1) package com.cloud.day6; public class Demo1 { publicstatic void main(String[] args) { MyThreadmt1=new MyThread("线程A", 1000); MyThreadmt2=new MyThread("线程B", 2000); MyThreadmt3=new MyThread("线程C", 3000); mt1.start()

线程基础:线程(2)——JAVA中的基本线程操作(上)

文章注明来源:http://blog.csdn.net/yinwenjie,主要供自己学习转载用 1.JAVA中线程的状态 1-1.#对象锁 在Java中每一个对象都有一把‘锁’,这个‘锁’可以是开放状态:也可以由某一个线程(或者多个线程)持有‘钥匙’:一旦在系统中某个对象的‘锁’存在至少一把‘钥匙’,那么任何线程操作这个对象,都必须验证是否有‘钥匙’,如果没有则会报IllegalMonitorStateException异常. 可是‘锁芯’(对象独占权)只有一个,那么可以打开这把锁的多个‘钥匙

线程操作学习20150905

1. ThreadPool 提供线程池的管理 ThreadPool是静态类,无构造函数,其方法都是静态. a) 主要使用的方法是: QueueUserWorkItem方法 public static bool QueueUserWorkItem(WaitCallback callBack): 将方法排入队列以便执行.此方法在有线程池线程变得可用时执行. public static bool QueueUserWorkItem(WaitCallback callBack,Object state)