今日分享开始啦,请大家多多指教~
明天给大家分享的是意识线程,创立线程和线程的罕用办法。
例程:实现字符迟缓输入
public class ThreadDemo1 {
public static void main(String[] args) throws InterruptedException {
String content = "他人说你不行,是因为他本人做不到。你要尽全力爱护你的幻想,那些讥笑你的人,他们必定会失败," +
"他们想把你变成和他们一样的人。如果你有幻想的话,就要致力去实现, 就这样。";
for (char item : content.toCharArray()) {
System.out.print(item);
//执行到此行休眠200毫秒
Thread.sleep(200);
}
}
}
多线程的劣势-减少运行速度
能够察看上面这个多线程例程,体验多线程时如何减少运行速度的。
该代码运行后果如下:
可见,多线程的劣势,能够减少运行速度,缩短运行工夫的。
线程的创立形式,入手接触线程(三类六种)
第一类:继承Thread类来实现线程的创立(2种创立形式)
第一类:继承 Thread 类创立办法1
public class ThreadDemo3 {
static class MyThread extends Thread {
@Override
public void run() {
//线程执行的工作
System.out.println("线程名称: " +
Thread.currentThread().getName());
}
}
public static void main(String[] args) {
System.out.println("以后线程的名称(主线程):" +
Thread.currentThread().getName());
//创立了线程
Thread t1 = new MyThread();
//运行线程
t1.start();
}
}
该代码执行如下
第一类:继承 Thread 类创立办法2
public class ThreadDemo4 {
public static void main(String[] args) {
System.out.println("以后线程的名称(主线程):" +
Thread.currentThread().getName());
Thread thread = new Thread() {
@Override
public void run() {
//线程执行的工作
System.out.println("线程名称: " +
Thread.currentThread().getName());
}
};
thread.start();
}
}
该代码执行如下
第一类创立形式(继承Thread类的形式)毛病:
Java 语言的设计当中,只能实现单继承,如果该类继承了Thread类,也就无奈继承其余类。
第二类:实现Runnable接口的形式来实现线程的创立(3种创立形式)
补救了第一类创立办法的毛病,即Java不能多继承,但能够实现多个接口
创立形式①:
该代码执行如下
创立形式②:应用匿名外部类的形式实现线程
public class ThreadDemo6 {
public static void main(String[] args) {
System.out.println("以后线程的名称(主线程):" +
Thread.currentThread().getName());
//应用匿名外部类的形式实现线程
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程名: " +
Thread.currentThread().getName());
}
});
thread.start();
}
}
该代码执行如下
创立形式③:lambda + 匿名 Runnable 的实现形式
public class ThreadDemo7 {
public static void main(String[] args) {
System.out.println("以后线程的名称(主线程):" +
Thread.currentThread().getName());
//JDK8中的固定写法
//lambda + 匿名 Runnable 的实现形式
Thread thread = new Thread(() -> {
System.out.println("线程名: " +
Thread.currentThread().getName());
});
thread.start();
}
}
该代码执行如下
第三类:实现Callable接口的形式来实现线程的创立(1种创立形式)
长处在于能够失去线程执行之后的后果。
该代码执行后果如下
线程休眠(实现形式有三种)
实现办法①长处:精确度很高。毛病:当休眠工夫过大时,代码书写较简单。
public class ThreadDemo9 {
public static void main(String[] args) throws InterruptedException {
System.out.println("开始工夫: " + new Date());
//休眠1s
Thread.sleep(1000);
System.out.println("完结工夫: " + new Date());
}
}
代码执行后果如下
当休眠较长时间,可用实现办法②和实现办法③。
实现办法②
该代码执行后果如下
实现办法③
public class ThreadDemo9 {
public static void main(String[] args) throws InterruptedException {
System.out.println("开始工夫: " + new Date());
//休眠1s
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
System.out.println("完结工夫: " + new Date());
}
该代码执行后果如下
典型例题:应用两个线程来打印”AABBCCDD”。
解题思路:应用多线程+线程休眠即可实现题目要求
该代码执行后果如下
小结
过程是零碎分配资源的最小单位,线程是系统调度的最小单位。一个过程内的线程之间是能够共享资源的。每个过程至多有一个线程存在,即主线程。
今日份分享已完结,请大家多多包涵和指导!
发表回复