多线程操作的方法(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 实现多线程 ...
随机推荐
- 8.并发容器ConcurrentHashMap#put方法解析
jdk1.7.0_79 HashMap可以说是每个Java程序员用的最多的数据结构之一了,无处不见它的身影.关于HashMap,通常也能说出它不是线程安全的.这篇文章要提到的是在多线程并发环境下的Ha ...
- blfs(systemv版本)学习笔记-制作一个简单的桌面系统
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 大概思路: lfs(系统)+xorg(驱动)+i3-wm(窗口+桌面)+lightdm(显示管理器+登录管理器) 链接: lfs ...
- [转]Serif和Sans-serif字体的区别
在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代 ...
- 记一次wepy里面的渲染问题(this.$apply()的使用)
今天在用wepy搞小程序的时候遇到了一个小坑,卡了我好一会,因为之前在做React,所以对wepy的了解不是特别深入,所以导致了这个问题的发生 先贴上来关键代码让大家看一看(备注之处是问题解决的方法) ...
- 【工具相关】Web-ionic-ionicLab的使用
一,下载地址为:http://lab.ionic.io/,下载后直接安装即可.图标如下图所示: 二,打开ionicLab,如下图所示: 三,打开一个已有的文件,File-->Open Exist ...
- php向数据库插入数据
<?php header("Content-type: text/html;charset=utf-8"); $con = mysql_connect("local ...
- Html5画钟表盘/指针实时跳动
1.最终效果 时钟.分钟.秒指针连续移动2.完整代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml&q ...
- Leaflet 测试加载高德地图
<!DOCTYPE html> <html> <head> <title>Leaflet Quick Start Guide Example</ ...
- synchronized的锁问题
有一个类A,提供了三个方法.分别是静态同步方法,非静态同步方法,含有静态代码块的方法 1 class A{ 2 public static synchronized void print1(){ 3 ...
- JavaScript大杂烩13 - 总结ECMAScript 5新功能
虽说这个标准已经出来很久了,所有的主流浏览器的最新版本也都支持了这些特性,但是很多的教程中并没有包含这个部分,这一节我们专门来总结一下这个标准中的新功能. Object的新方法 在最新的JavaScr ...