并行与并发:
并行:多个CPU同时执行多个任务。
并发:一个CPU(采用时间片)同时执行多个任务。
多线程程序的优点:
1.提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
2.提高计算机系统CPU的利用率
3.改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
多线程的创建,方式一:继承于Thread类
1.创建一个继承于Thread类的子类
2.重写Thread类的run() - - > 将此线程执行的操作声明在run()中
3.创建Thread类的子类的对象
4.通过此对象调用start()
例子:遍历100以内的所有的偶数
package com.atguigu.java;
class MyThread extends Thread{
@Override
public void run(){
for (int i = 0; i < 100; i++){
if (i % 2 == 0){
System.out.println(i);
}
}
}
}
public class ThreadTest {
public static void main(String[] args) {
MyThread t1 = new MyThread();
t1.start();
for (int i = 0; i < 500; i++){
if (i % 2 == 0){
System.out.println(i + "main");
}
}
}
}
问题一:我们不能通过直接调用run()的方式启动线程。
问题二:再启动一个线程,遍历100以内的偶数。不可以还让已经start()是线程去执行。会报异常
练习:
创建两个分线程,其中一个线程遍历100以内的偶数,另一个线程遍历100以内的奇数。
package com.atguigu.exer;
public class ThreadDemo {
public static void main(String[] args) {
// MyThread1 m1 = new MyThread1();
// MyThread2 m2 = new MyThread2();
//
// m1.start();
// m2.start();
//创建Thread类的匿名子类的方式
new Thread(){
@Override
public void run() {
for (int i = 0;i < 100;i++){
if(i % 2!= 0) {
System.out.println(i);
}
}
}
}.start();
new Thread(){
@Override
public void run() {
for (int i = 0;i < 100;i++){
if(i % 2== 0) {
System.out.println(i);
}
}
}
}.start();
}
}
class MyThread1 extends Thread{
@Override
public void run() {
for (int i = 0;i < 100;i++){
if(i % 2!= 0) {
System.out.println(i);
}
}
}
}
class MyThread2 extends Thread{
@Override
public void run() {
for (int i = 0;i < 100;i++){
if(i % 2== 0) {
System.out.println(i);
}
}
}
}
总结:今天学习了程序进程线程的概念、单核与多核的CPU的并行与并发、多线程的优点、创建多线程方式一:继承Thread类、创建过程中两个问题的说明、继承方式的课后练习。
明日计划:继续学习多线程的内容。