多线程操作的方法(sleep,)setPriority(Thread.MIN_PRIORITY);yield();
在多线程中所有的操作方法都是从Thread类开始的,所有的操作基本都在Thread类中。
第一取得线程名字
a,在Thread类中,可以通过getName()方法,获得线程的名字,可以通过setName()方法设置线程的名字
b,线程名字一般在线程启动前设置,但是也允许为已经运行的线程设置名称,允许2个Thread对象有相
同的名字,但是不推荐,你懂的!!!
c,如果程序没有为线程指定名字,则系统自动为线程分配一个名称。
package xianchengcaozuo;
public class ThreadName {
public static void main(String[] args) {
Demo d1= new Demo();
Thread t1= new Thread(d1);
Thread t2= new Thread(d1,"线程A");
Thread t3= new Thread(d1,"线程B");
Thread t4= new Thread(d1);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Demo implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=;i<;i++){
System.out.println(Thread.currentThread().getName()+"运行,i="+i);
}
}
}
Thread-0运行,i=0
Thread-0运行,i=1
Thread-0运行,i=2
线程A运行,i=0
线程A运行,i=1
线程A运行,i=2
Thread-0运行,i=3
Thread-0运行,i=4
线程A运行,i=3
线程A运行,i=4
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
Thread-1运行,i=0
Thread-1运行,i=1
Thread-1运行,i=2
Thread-1运行,i=3
Thread-1运行,i=4
没指定名字,则按编号!!
第二 获取当前线程对象currentThread()
第三判断线程是否启动成功 isAlive()
第四 强制运行线程
package xianchengcaozuo;
/*
* 强制运行线程用join方法,期间其它线程无法运行,必须等待此线程
* 执行完后,其它线程才可以执行
*/
public class Qiangzhi {
public static void main(String[] args) {
Demo1 d1= new Demo1();
Thread t1= new Thread(d1,"线程A");
t1.start();
for(int i=0;i<50;i++){
if(i>10){
try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("main线程运行:"+i);
} }
}
class Demo1 implements Runnable{ @Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<50;i++){
System.out.println(Thread.currentThread().getName()+"运行,i="+i);
} } }
结果:
main线程运行:0
main线程运行:1
main线程运行:2
main线程运行:3
main线程运行:4
main线程运行:5
main线程运行:6
main线程运行:7
main线程运行:8
main线程运行:9
main线程运行:10
线程A运行,i=0
线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程A运行,i=5
线程A运行,i=6
线程A运行,i=7
线程A运行,i=8
线程A运行,i=9
线程A运行,i=10
线程A运行,i=11
线程A运行,i=12
线程A运行,i=13
线程A运行,i=14
线程A运行,i=15
线程A运行,i=16
线程A运行,i=17
线程A运行,i=18
线程A运行,i=19
线程A运行,i=20
线程A运行,i=21
线程A运行,i=22
线程A运行,i=23
线程A运行,i=24
线程A运行,i=25
线程A运行,i=26
线程A运行,i=27
线程A运行,i=28
线程A运行,i=29
线程A运行,i=30
线程A运行,i=31
线程A运行,i=32
线程A运行,i=33
线程A运行,i=34
线程A运行,i=35
线程A运行,i=36
线程A运行,i=37
线程A运行,i=38
线程A运行,i=39
线程A运行,i=40
线程A运行,i=41
线程A运行,i=42
线程A运行,i=43
线程A运行,i=44
线程A运行,i=45
线程A运行,i=46
线程A运行,i=47
线程A运行,i=48
线程A运行,i=49
main线程运行:11
main线程运行:12
main线程运行:13
main线程运行:14
main线程运行:15
main线程运行:16
main线程运行:17
main线程运行:18
main线程运行:19
main线程运行:20
main线程运行:21
main线程运行:22
main线程运行:23
main线程运行:24
main线程运行:25
main线程运行:26
main线程运行:27
main线程运行:28
main线程运行:29
main线程运行:30
main线程运行:31
main线程运行:32
main线程运行:33
main线程运行:34
main线程运行:35
main线程运行:36
main线程运行:37
main线程运行:38
main线程运行:39
main线程运行:40
main线程运行:41
main线程运行:42
main线程运行:43
main线程运行:44
main线程运行:45
main线程运行:46
main线程运行:47
main线程运行:48
main线程运行:49
第五 线程的休眠
package xianchengcaozuo;
import java.util.Date;
/*
* 通过sleep方法,可以使线程暂停执行
*
*/
public class ThreadSleep {
public static void main(String[] args) {
Demo2 d1= new Demo2();
Thread t1= new Thread(d1,"线程C");
t1.start();
}
}
class Demo2 implements Runnable{
@Override
public void run() {
for(int i=0;i<10;i++){
try {
//此处是毫秒
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new Date());
System.out.println(Thread.currentThread().getName()+"运行,i="+i);
}
}
}
Tue Apr 22 11:10:40 CST 2014
线程C运行,i=0
Tue Apr 22 11:10:45 CST 2014
线程C运行,i=1
Tue Apr 22 11:10:50 CST 2014
线程C运行,i=2
Tue Apr 22 11:10:55 CST 2014
线程C运行,i=3
Tue Apr 22 11:11:00 CST 2014
线程C运行,i=4
线程终止:
如果主线程是5000,那么会先run正常,在被终止
package xianchengcaozuo;
//当一个线程运行的时候,另一个线程可以通过interrupt方法种植其线程. class MyThread09 implements Runnable {
public void run() {
System.out.println("1、进入run方法");
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(5000);
System.out.println("2、休眠已经完成");
} catch (Exception e) {
System.out.println("3、休眠被终止");
return;
}
System.out.println("4、run方法正常结束");
}
}
}
class Threadinterrupt{
public static void main(String[] args) {
MyThread09 my = new MyThread09();
Thread t = new Thread(my,"线程");
t.start();
try {
Thread.sleep(2000);
} catch (Exception e) {
}
t.interrupt();
}
}
1、进入run方法
3、休眠被终止
线程的优先级:
package xianchengcaozuo;
public class Threadjibie {
public static void main(String[] args) {
Demo5 my = new Demo5();
Thread t1 = new Thread(my,"线程A");
Thread t2 = new Thread(my,"线程B");
Thread t3 = new Thread(my,"线程C");
//设置线程优先级
t1.setPriority(Thread.MIN_PRIORITY);
t2.setPriority(Thread.NORM_PRIORITY);
t3.setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
t3.start();
}
}
class Demo5 implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(500);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName() + "运行,i = " + i);
}
}
}
线程C运行,i = 0
线程B运行,i = 0
线程A运行,i = 0
线程C运行,i = 1
线程B运行,i = 1
线程A运行,i = 1
线程C运行,i = 2
线程B运行,i = 2
线程A运行,i = 2
线程C运行,i = 3
线程B运行,i = 3
线程A运行,i = 3
线程C运行,i = 4
线程B运行,i = 4
线程A运行,i = 4
主方法的优先级是中级
线程的礼让:
package xianchengcaozuo;
//yield(),线程礼让,将操作让给其它线程
public class ThreadLirang {
public static void main(String[] args) {
Demo6 d1= new Demo6(); Thread t1 = new Thread(d1);
Thread t2 = new Thread(d1);
t1.start();
t2.start(); }
}
class Demo6 implements Runnable{ @Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"运行,i="+i);
if(i==3){
Thread.currentThread().yield();
System.out.println(Thread.currentThread().getName()+"礼让");
}
}
} }
结果: Thread-1运行,i=0
Thread-1运行,i=1
Thread-1运行,i=2
Thread-1运行,i=3
Thread-0运行,i=0
Thread-0运行,i=1
Thread-0运行,i=2
Thread-0运行,i=3
Thread-0礼让
Thread-0运行,i=4
Thread-1礼让
Thread-1运行,i=4
多线程操作的方法(sleep,)setPriority(Thread.MIN_PRIORITY);yield();的更多相关文章
- Thread中yield方法
先上一段代码 public class YieldExcemple { public static void main(String[] args) { Thread threada = new Th ...
- (转)Thread中yield方法
先上一段代码 public class YieldExcemple { public static void main(String[] args) { Thread threada = new Th ...
- Android多线程操作,as快捷键笔记
Android studio 快捷键 cmd+p 快速查看该方法的参数定义 * * option + shift +上下 快速移动上下行 * * cmd + e 显示最近操作的文件 * * cmd + ...
- Java自学-多线程 常见线程方法
Java 常见的线程方法 示例 1 : 当前线程暂停 Thread.sleep(1000); 表示当前线程暂停1000毫秒 ,其他线程不受影响 Thread.sleep(1000); 会抛出Inter ...
- C# winform编程中多线程操作控件方法
private void Form1_Load(object sender, EventArgs e) { Thread newthread = new Thread(new ThreadStart( ...
- sqlite:多线程操作数据库“database is locked”解决方法(二)
上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...
- java多线程基本概述(二)——Thread的一些方法
在Thread类中有很多方法值得我们关注一下.下面选取几个进行范例: 1.1.isAlive()方法 java api 描述如下: public final boolean isAlive() Tes ...
- 创建多线程的第一种方式——创建Thread子类和重写run方法
创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...
- 2016/1/25 多线程 作业 方法一 继承Thread 方法二 实现Runnable 多线程笔记
/* * 1,尝试定义一个继承Thread类的类,并覆盖run()方法, * 在run()方法中每隔100毫秒打印一句话.*/ package Stream; //方法一 继承Thread 实现多线程 ...
随机推荐
- 【Java并发编程】19、DelayQueue源码分析
DelayQueue,带有延迟元素的线程安全队列,当非阻塞从队列中获取元素时,返回最早达到延迟时间的元素,或空(没有元素达到延迟时间).DelayQueue的泛型参数需要实现Delayed接口,Del ...
- 总结:JDK1.5-JDK1.8各个新特性
JDK1.5-JDK1.8各个新特性 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.以下介绍一下JDK1 ...
- Class<?> getClass()
getClass()方法属于Object的一部分,它将产生对象的类,并且在打印该类时,可以看到该类类型的编码字符串,前导"["表示这是一个后满紧随的类型的数组,而紧随的" ...
- HDU4287
Intelligent IME Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- jQuery js 中return false,e.preventDefault(),e.stopPropagation()的区别(事件冒泡)
有时候遇到冒泡事件很烦人,真的..... 1.e.stopPropagation()阻止事件冒泡 <head> <title></title> <script ...
- 运行gulp项目报错:AssertionError: Task function must be specified。
一.问题描述: gulp项目在本地windows 10机器上跑没有任何问题,但是放在centos 7虚拟机上跑报错:AssertionError: Task function must be spec ...
- SuperMap 三维产品资料一览表
转自:http://blog.csdn.net/supermapsupport/article/details/68924713 如何能快速地开发项目中的三维功能呢?本文为您提供全方位的三维资料,为您 ...
- 【转】巧用DOS tree命令+批处理 实现 指定文件 批量复制!
转自:http://www.cnblogs.com/looky/archive/2010/01/24/1655292.html 今天一朋友叫我帮忙解决指定文件批量复制的问题,于是找了一大堆批处理命令, ...
- 云卡门禁安卓SDK_BLEDOOR_SDK_ANDROID_2016_12_15
package com.bosk.bledoor.sdk; //sdk包的开门服务类,AndroidManifest.xml 必须注册 //<service //android:name=&qu ...
- wap2app(六)-- wap2app的原生标题头无法隐藏
大概有一个星期没有用HBuilder打包,今天更新了HBuilder版本再继续打包,就出现了一系列问题.其中有一个就是打包之后,除首页外,其他页面多出了原生标题,如下图: 查阅资料,打开 sitema ...