java线程常用API总结
Posted 我想月薪过万
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程常用API总结相关的知识,希望对你有一定的参考价值。
一、线程名字的修改
package ThreadDemo;
/**
* 1、怎么获取当前线程对象?
* 2、获取线程对象的名字
* 线程对象.getName();
* 3、修改线程对象的名字
* 线程对象.setName("线程名字");
* 4、当线程没有设置名字的时候,默认的名字有什么规律?
* Thread-0
* Thread-1
* Thread-2
*/
public class ThreadTest05
public static void main(String[] args)
// 创建线程对象
MyThread2 t = new MyThread2();
// 设置线程的名字
// t.setName("tttt");
// 获取线程的名字
System.out.println(t.getName());
// 启动线程
t.start();
class MyThread2 extends Thread
@Override
public void run()
for (int i = 0; i < 100; i++)
System.out.println("分支线程-->" + i);
二、获取当前线程对象
package ThreadDemo;
/**
* 1、怎么获取当前线程对象?
* 2、获取线程对象的名字
* 线程对象.getName();
* 3、修改线程对象的名字
* 线程对象.setName("线程名字");
* 4、当线程没有设置名字的时候,默认的名字有什么规律?
* Thread-0
* Thread-1
* Thread-2
*/
public class ThreadTest05
public static void main(String[] args)
// currentThread就是当前线程对象
// 这个代码出现在main方法当中,所以当前线程就是主线程
Thread currentThread = Thread.currentThread();
System.out.println(currentThread.getName());
MyThread2 t = new MyThread2();
t.setName("t");
MyThread2 t2 = new MyThread2();
t2.setName("t2");
t.start();
t2.start();
class MyThread2 extends Thread
@Override
public void run()
for (int i = 0; i < 100; i++)
// currentThread就是当前线程对象
Thread currentThread = Thread.currentThread();
System.out.println(currentThread.getName());
三、线程的sleep方法
package ThreadDemo;
public class ThreadTest06
public static void main(String[] args)
// 让当前线程进入休眠,睡眠5秒
// 当前线程是主线程
try
Thread.sleep(1000 * 5);
catch (InterruptedException e)
e.printStackTrace();
// 5秒之后执行这里的代码
System.out.println("hello world!");
四、终止线程的睡眠
package ThreadDemo;
/**
* sleep睡眠太久了,如果希望半道上醒来,该怎么办
* 注意:这个不是中断线程的执行,是终止线程的睡眠
*/
public class ThreadTest08
public static void main(String[] args)
Thread t = new Thread(new MyRunnable2());
t.setName("t");
t.start();
//希望5秒之后,t线程醒来
try
Thread.sleep(1000 * 5);
catch (Exception e)
e.printStackTrace();
//终断t线程的睡眠(这种中断睡眠的方式依靠了java的异常处理机制)
t.interrupt();
class MyRunnable2 implements Runnable
@Override
public void run()
System.out.println(Thread.currentThread().getName() + "---> begin");
try
//睡眠1年
Thread.sleep(1000 * 60 * 60 * 24 * 365);
catch (InterruptedException e)
e.printStackTrace();
//1年之后才会执行这里
System.out.println(Thread.currentThread().getName() + "---> end");
五、强行终止线程的执行
不合理的写法
package ThreadDemo;
public class ThreadTest09
public static void main(String[] args)
Thread t = new Thread(new MyRunnable3());
t.setName("t");
t.start();
//模拟5秒
try
Thread.sleep(1000 * 5);
catch (InterruptedException e)
e.printStackTrace();
// 5秒之后强行终止t线程
t.stop(); // 已过时(不建议使用。因为这种方式容易丢失数据)
class MyRunnable3 implements Runnable
@Override
public void run()
for (int i = 0; i < 10; i++)
System.out.println(Thread.currentThread().getName() + "--->" + i);
try
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();
合理的写法
package ThreadDemo;
public class ThreadTest09
public static void main(String[] args)
MyRunnable3 r = new MyRunnable3();
Thread t = new Thread(r);
t.setName("t");
t.start();
//模拟5秒
try
Thread.sleep(1000 * 5);
catch (InterruptedException e)
e.printStackTrace();
// 5秒之后强行终止t线程
r.run = false;
class MyRunnable3 implements Runnable
boolean run = true;
@Override
public void run()
for (int i = 0; i < 10; i++)
if (run)
System.out.println(Thread.currentThread().getName() + "--->" + i);
try
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();
else
//结束
return;
以上是关于java线程常用API总结的主要内容,如果未能解决你的问题,请参考以下文章