本文已参与「新人创作礼」活动,一起开启掘金创作之路。
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
//1.创建一个继承于Thread类的子类
class Mythread extends Thread{
//2.重写Thread类的run()
@Override
public void run() {
for(int i=0;i<10000;i++) {
if(i%2==0) {
System.out.println(Thread.currentThread().getName()+i);
}
}
}
}
public class lan {
public static void main(String[] args) {
//3.创建Thread类的子类对象
Mythread s1 = new Mythread();
//4.通过此对象调用start
s1.start();
//不能直接调用run
for(int i=0;i<100;i++) {
if(i%2!=0) {
System.out.println(i+"*******************");
}
}
}
}
如果要创建第二个线程,那么就需要重新创建一个线程的对象就可以了
Mythread s2 = new Mythread();
//不能直接调start
可以直接getName读取线程名 和set修改线程名字
package text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Product s1 = new Product();
s1.setName("线程1");
s1.start();
Thread.currentThread().setName("主线程");
for(int i=999;i<4000;i++) {
System.err.println(Thread.currentThread().getName());
}
}
}
线程关键字
线程的优先级 MAX_PRIORITY:10 MIN_PRIORITY:1 NORM_PRIORITY:5 获取当前线程的优先级 getPriority() setPriority(int p)//设置线程的优先级
s1.setPriority(10);
实现Runnable接口
-
共用一个线程
class runpo implements Runnable{
//创建一个Runnable的接口 1
@Override
public void run() {
//实现抽象方法 2
for(int i=0;i<100;i++) {
System.out.println(i);
}
}
}
//创建类的对象 3
runpo s1 =new runpo();
//将此对象作为参数传递到Thread的构造器中 创建thread的对象 4
Thread t1 = new Thread(s1);
//通过Thread的对象调用start 5 调用Thread线程中的run方法
t1.start();
线程的生命周期 新建 》就绪》 运行》 堵塞 》死亡
同步监视器同步共享数据 同步监视器俗称 锁 任何一个类的对象都可以承当我们这个锁 只要锁用的同一个就不会出现异常
package day1;
class runpo implements Runnable{
Object s1 = new Object();
//创建一个Runnable的接口
private int tike = 100;
@Override
public void run() {
while(tike>0) {
synchronized (s1) {//同步
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"票号"+tike);
tike--;
}
}
}
}
public class 多线程 {
public static void main(String[] args) {
runpo s1 = new runpo();
Thread t2 = new Thread(s1);
Thread t3 = new Thread(s1);
t2.start();
t3.start();
Thread t4 = new Thread(s1);
t4.start();
}
}
同步的方式解决了线程的安全问题 操作同步代码时,只能有一个线程参与,其他线程等待。相当于一个单线程的过程效率低。 只要没有共享数据就没有线程安全的问题 而且包含的代码不能多了也不能少了要刚刚好合适
同步方法解决Runnable接口问题
把方法前面声明一个 synchronized 就可以了
public synchronized void run() {