标签:结束 over 操作 使用 sleep 守护线程 顺序 getname 位置
第一,继承 Thread 类
第二,覆盖 run 方法(就是更新运行过程), 实现用户自己的过程
第三,创建线程实例(就是创建一个线程)
第四,使用线程实例的 start() 方法启劢线程, 启劢以后线程会尽快的去并发执行 run()
public class Mythread extends Thread {
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println("hello"+i);
yield();
}
}
}
Mythread my1=new Mythread();
my1.start();
public class MyThread2 implements Runnable {
int tickets = 10;
@Override
public void run() {
for (int i = 0; i <10; i++) {
if (this.tickets > 0){
System.out.println(Thread.currentThread().getName() + "出售车票"
+ tickets--);
}
}
}
}
new 关键字创建了一个线程后,该线程就处于新建状态,调用 start()方法时,线程启劢,迚入 Runnable 状态
Runnable 状态时,表示线程准备就绪,等待获取 CPU
线程获取了 CPU,则迚入 Running 状态
线程调用了 sleep()方法,线程调用了一个阻塞式 IO 方法时被阻塞,当阻塞结束时,该线程将迚入 Runnable 状态
当线程的 run()方法执行结束,线程迚入 Dead 状态
(资源紧张时候, 尽可能优先)setPriority()最高级别为10,最低级别为1,默认级别为5
Mythread my1=new Mythread();
Mythread2 my2=new Mythread2();
my1.setPriority(10);//设置线程的优先级(资源紧张时候,尽可能优先)
my2.setPriority(1);
将my1的优先级设为10,my2的优先级设为1,多的代表优先被执行
setDaemon();只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Java 过程的结束:当前所有前台线程都结束时, Java 过程结束,当前台线程结束时,不管后台线程是否结束, 都要被停掉!
Thread2 t2=new Thread2();
t2.setDaemon(true);
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。
Mythread my1=new Mythread();
Mythread2 my2=new Mythread2();
my1.start();
my1.join();//先执行完my1,再执行下面的
my2.start();
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
public void run() {
for (int i = 0; i < 30; i++) {
synchronized (this) {// 同步代码块
if (tickets > 0) {
System.out.println(Thread.currentThread().getName()
+ "出售车票" + tickets--);
}
}
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
}
}
暂停当前正在执行的线程对象,并执行其他线程。 一般写在重写方法里面
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println("yes"+i);
yield();
}
}
改变线程名称,使之与参数 name 相同。
Thread1 t1=new Thread1();
t1.setName("主线程");
1、异步:并发, 各干自己的。
2、同步:步调一致的处理。
多个线程并发读写同一个临界资源时候会发生”线程并发安全问题。
常见的临界资源:
1、多线程共享实例变量
2、静态公共变量
int tickets=20;
public void run() {
for (int i = 0; i <20; i++) {
sale();
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
}
}
public synchronized void sale(){//创建方法,加synchronized关键字
if(tickets>10){
System.out.println(Thread.currentThread().getName()+"出售车票"+tickets--);
}
}
int tickets = 20;
@Override
public void run() {
for (int i = 0; i < 30; i++) {
synchronized (this) {// 同步代码块
if (tickets > 0) {
System.out.println(Thread.currentThread().getName()
+ "出售车票" + tickets--);
}
}
try {
Thread.sleep(10);
} catch (Exception e) {
// TODO: handle exception
}
}
}
标签:结束 over 操作 使用 sleep 守护线程 顺序 getname 位置
原文地址:http://www.cnblogs.com/taoge1989/p/6111538.html