java多线程基础
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java多线程基础,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3389字,纯文字阅读大概需要5分钟。
内容图文
![java多线程基础](/upload/InfoBanner/zyjiaocheng/608/2e55d40b34764c04a0d49a22d3353c28.jpg)
java多线程基础
1. 线程的创建
两种方法:继承Thread,实现runable.
1.1 继承Thread 重写run方法
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("do someThing");
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
1.2 实现runable
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("do someThing");
}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
2. 常用方法
2.1 currentThread()
静态方法,返回对当前正在执行的线程对象的引用
Thread thread = Thread.currentThread();
System.out.println(thread.getName());
2.2 start()
启动线程,和run()方法的区别,使用run()方法并没有真的启动线程而start方法是真正启动了线程
2.3 yield()
让出对当前处理器的占有,程序调度的时候有可能继续运行这个线程。
Thread.yield();
2.4 sleep()
让当前线程睡眠一段时间
public static void main(String[] args) {
Thread t = new Thread() {
@Override
public void run() {
System.out.println("sleep...");
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("sleep complete");
}
};
t.start();
}
2.5 join()
使当前线程等待该线程执行完毕
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread() {
@Override
public void run() {
System.out.println("sleep...");
try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("sleep completed");
}
};
t.start();
System.out.println("join");
t.join();
System.out.println("join completed");
}
2.6 wait/notify
1.wait()/notify()必须在synchroized中 否则会报错
2.当线程执行wait()时,会把当前的锁释放,然后让出CPU,进入等待状态。
3.当执行notify方法时,会唤醒一个处于等待该 对象锁 的线程,然后继续往下执行,直到执行完退出对象锁锁住的区域(synchronized修饰的代码块)后再释放锁
4.notifyAll方法和nofity类似,但notifyAll会唤醒所有等待的线程
public class WaitAndNotify {
private static final Object lock = new Object();
public static void main(String[] args) {
Thread tw = new Thread(){
@Override
public void run() {
while(true) {
try {
synchronized (lock) {
System.out.println("wait...");
lock.wait();
System.out.println("wait");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread tn = new Thread(){
@Override
public void run() {
while(true) {
try {
sleep(1000L * 5);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) {
System.out.println("notify");
lock.notify();
}
}
}
};
tw.start();
tn.start();
}
}
3. 线程状态
-
新建(NEW)
表示线程被创建出来还没真正启动的状态。 -
就绪(RUNNABLE)
表示该线程已经在 JVM 中执行,可能是正在运行,也可能还在等待系统分配给它 CPU 片段,在就绪队列里面排队。 -
阻塞(BLOCKED)
表示线程在等待Monitor lock。比如,线程试图通过 synchronized 去获取某个锁。 -
等待(WAITING)
表示正在等待其他线程采取某些操作。比如当前线程调用wait()方法等待其他线程notify。Thread.join() 也会令线程进入等待状态。 -
计时等待(TIMED_WAIT)
和等待状态类似,但是调用的是存在超时条件的方法,比如 wait 或 join 等方法的指定超时版本。 -
终止(TERMINATED)
线程已经完成使命,终止运行。
其他
守护线程和用户线程
使用setDaemon(true)方法设置线程为守护线程,守护线程的特点是当进程中只剩下守护线程时,所有守护线程强制终止。GC就是运行在一个守护线程上的。
内容总结
以上是互联网集市为您收集整理的java多线程基础全部内容,希望文章能够帮你解决java多线程基础所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。