package org.westos.多线程博客练习;
/**
* 进程:系统可以进行独立调配并且是一个不可分割 独立单元
开启一个任务管理器,很多进程(应用软件/某些客户端)
什么是多进程?
多进程的意义:是为了提高CPU的使用率
现在计算机都是多进程,假设:在听音乐的同时,也在打游戏..,他们是同时进行的吗?
他们不是同时进行的,感觉同时,一点点CPU的时间片在同一个时刻在两个进程之间进行高效的切换!
什么线程?
线程:进程的一个独立的单元
一个进程里面有多个任务,把每一个任务看成一个线程
多线程:
线程之间在抢占CPU的执行权(抢占资源)
多线程的执行具有随机性
* */
/**
* 如何实现多线程程序呢?
* 要实现多线程程序,需要开启进程,
* 开启进程,是需要创建系统资源,但是Java语言不能创建系统资源
* 只有C/C++可以创建系统资源, 利用c语言创建好的系统资源实现
* Java提供了一个类:Thread类
* 实现多线程程序的步骤:
* 1)将类声明为 Thread 的子类
* 2)该子类应重写 Thread 类的 run 方法
* 3)在主线程进行该自定义的线程类的对象的创建
*
*
*
* 并行和并发(高并发:MyBatis --->IBatis:半自动化)
* 强者逻辑上的同时,指的是同一个时间段内
* 后者物理上的同时,指的是同一个时间点
* Thread 类提供了一些方法
* public final void setName(String name):给线程起名称
* public final String getName() :获取线程名称
* Thread.currentThread()返回当前正在执行的线程
* */
public class Text1 {
public static void main(String[] args) {
MyThread t1 = new MyThread();
t1.setName("线程1");
//可以将线程名字写在构造方法中,前提是我们在自定义的线程类中提供了有参构造
MyThread t2 = new MyThread("线程2");
t1.start();
t2.start();
//线程1,2开始抢占资源
}
}
package org.westos.多线程博客练习;
/**
*public final void join():等待该线程终止 interruputedException 中断异常
*
*分别创建三个子线程,让第一个子线程执行之后,调用join()等待该线程中,在执行t2,t3线程
*/
public class Text2 {
public static void main(String[] args) {
MyThread t1 = new MyThread("线程1");
MyThread t2 = new MyThread("线程2");
MyThread t3 = new MyThread("线程3");
t1.start();
t2.start();
try {
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//当线程1,2执行完毕后再执行线程3
t3.start();
}
}
package org.westos.多线程博客练习;
/**
* public static void yield()暂停当前正在执行的线程对象,并执行其他线程
* 写在Thread的子类中
* public static void sleep(long millis):线程睡眠 指定是时间毫秒值
* 两个区别?
public final void stop() ;强迫线程停止执行。 不会执行了 (过时了),方法能使用的
public void interrupt()中断线程。 表示中断线程的一种状态
面试题
区别?
wait(): wait()调用的,立即释放锁 (同步锁/Lock锁)
sleep(): 线程睡眠,调用不会释放锁
*
*
*/
public class Text3 {
public static void main(String[] args) {
MyThread2 t1 = new MyThread2("线程1");
MyThread2 t2 = new MyThread2("线程2");
t1.start();
t2.start();
//线程1,2开始抢占资源,每个线程每秒执行一次,但是两个线程还是在抢占资源
}
}
package org.westos.多线程博客练习;
/**
* 线程的另一种创建方法:
* 应用了Thread的public Thread(Runnable target,String name)构造方法
* 实现多线程程序的第二种方式:
* 1)自定义一个类,实现Runnable接口
* 2)实现接口中的run方法,对耗时的代码进行操作
* 3)然后在主线程中创建该了对象,将该类对象做为一个资源类,创建Threadd类的对象,将刚才的资源类作为参数进行传递
* */
public class Text4 {
public static void main(String[] args) {
MyThread3 my = new MyThread3();
Thread t1 = new Thread(my,"张三");
Thread t2 = new Thread(my,"李四");
t1.start();
t2.start();
}
}
Thread子类
package org.westos.多线程博客练习;
public class MyThread extends Thread {
//无参构造
public MyThread() {
}
//有参构造
public MyThread(String name) {
super(name);
}
@Override
public void run(){
for(int i= 0;i<100;i++) {
System.out.println(getName()+"----"+i);
}
}
}
package org.westos.多线程博客练习;
public class MyThread2 extends Thread{
//无参构造
public MyThread2() {
}
//有参构造
public MyThread2(String name) {
super(name);
}
@Override
public void run(){
for(int i= 0;i<100;i++) {
System.out.println(getName()+"----"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package org.westos.多线程博客练习;
public class MyThread3 implements Runnable{
@Override
public void run() {
for(int i = 0;i<100;i++) {
System.out.println(Thread.currentThread().getName()+"---"+i);
}
}
}