首先是先了解:
- 线程与进程:进程是资源分配的基本单位,线程是调度的基本单位。进程包含线程,线程共用进程的资源。
- 线程与进程区别:简单来说进程可以看作一个应用,线程是在进程中执行的一个任务;线程是进程的子集,一个程序至少有一个进程,一个进程至少有一个线程;不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。
#多线程的实现: - 继承Thread类:
class MyThread extends Thread{//线程的主体类
private String title;
public MyThread(String title) {
this.title = title;
}
@Override
public void run() {//线程的主体方法
for(int i = 0; i < 10; i++) {
System.out.println(this.title+"运行:i="+i);
}
}
}
public class test1 {
public static void main(String[] args) {
new MyThread("线程A").start();
new MyThread("线程B").start();
new MyThread("线程C").start();
}
}
- 实现Runnable接口
class MyThread1 implements Runnable{//线程的主体类
private String title;
public MyThread1(String title) {
this.title = title;
}
@Override
public void run() {//线程的主体方法
for(int i = 0; i < 10; i++) {
System.out.println(this.title+"运行1:i="+i);
}
}
}
public class test2 {
public static void main(String[] args) {
// Thread threadA = new Thread(new MyThread1("线程对象A"));
// Thread threadB= new Thread(new MyThread1("线程对象B"));
// Thread threadC = new Thread(new MyThread1("线程对象C"));
// threadA.start();
// threadB.start();
// threadC.start();
for(int x=0;x<3;x++) {
String title = "线程对象-"+x;
new Thread(()->{
for(int y=0;y<10;y++) {
System.out.println(title+"运行:y="+y);
}
}).start();;
}
}
}
要记住要调用 Thread.start() 方法才会启动线程,如果直接调用 Thread . run() 方法,就只会和普通的方法一样。
那问题来了:是用Thread还是Runnab呢?这个就看你的是否要调用其他类,因为在java中是没有多继承的,所以使用Runnable就好了!文本样式
多线程的拓展:
- 线程的命名:
new Thread(mt,"线程对象").start();
- 线程休眠:
Thread.sleep(1000);
- 线程中断:
Thread thread = new Thread();thread.interrupt();
- 线程的强制执行:
Thread mainthread = Thread.currentThread();mainthread.join();
- 线程的礼让:
Thread.yield();
- 当前线程:
Thread.currentThread().getName()
- 设置线程优先级:
threadA.setPriority(Thread.MAX_PRIORITY); threadB.setPriority(Thread.MIN_PRIORITY); threadC.setPriority(Thread.NORM_PRIORITY);
(主线程一般都是5,即NORM_PRIORITY) - synchronized:同步方法(相当于上锁),
public synchronized boolean sale() {}
- wait():导致线程进入等待状态,直到它被其他线程通过notify()或者notifyAll唤醒,该方法只能在同步方法中调用。
- notify():唤醒线程
- notifyAll():唤醒所有线程
- volatile 关键字:主要在属性上使用 ,绕过数据属性,直接使用内存的操作。