java学习笔记 多线程(一)创建多线程,线程常用方法

首先是进程和线程的区别,进程就是像打开csgo.exe就是一个进程,然后打开LOL.exe又是另外一个进程了。

而线程呢,就是在同一进程内部,发生的事情。

那么就开始了解线程!

创建多线程:

线程有三种创建方法:

1.继承Thread类的方式

public class Testthread extends Thread{
    public void run(){
        //
    }
}

run方法里面就是写你这个线程要做的事情。

然后:

TestThread t1=new TestThread();
t1.start();

通过.start()方法就可以开始t1这个线程啦!

2.实现Runnable的方式

public class ttt implements Runnable{
     
    public void run(){
        
    }
}

然后:

ttt t2 = new ttt();
         
new Thread(t2).start();

就可以开始t2这个线程啦,需要注意的同样也是要有.start()才能运行这个线程。

3.匿名类的方式

这也是我喜欢的方式,因为写起来简单hhhh

扫描二维码关注公众号,回复: 9166347 查看本文章
Thread t3 = new Thread() {
    public void run()
    {
        //
    }
};

同样的要注意:启动线程是start()方法,run()并不能启动一个新的线程。

常见的线程方法:

1、暂停当前线程: .sleep()

顾名思义,把当前的线程暂停一定时间,其他的线程并不会受到影响。

注意是会抛出interruptedException异常的。

2、加入到当前线程中: .join()

join的作用是当这个线程运行完事儿之后程序才继续往下走,不然会一直停在join方法处。
            使用场景:如果在某处后边的处理需要使用到t1的数据,那么可以用join来等待t1线程执行结束。

3、定义线程的优先级: .setPriority()

当线程处于竞争关系的时候,优先级高的线程会获得更多的cup资源,也就是这个线程会执行得更快

4、临时暂停: .yield

并不是直接就给它停住了,而是它自己也在慢慢运行,但是会把更多的cup资源让给其他的线程。

5、守护线程: .setDaemon(true)

守护线程的概念是: 当一个进程里,所有的线程都是守护线程的时候,结束当前进程。

就是说可以用来把一些辅助线程写成守护的,那么当干实事的线程完事了,这些守护的线程就没必要继续了。

比如写日志啊,性能统计等。

作业1、波动拳:

package Multiplethread;
/*
英雄有可以放一个技能叫做: 波动拳-a du gen。
每隔一秒钟,可以发一次,但是只能连续发3次。

发完3次之后,需要充能5秒钟,充满,再继续发。

借助本章节学习到的知识点,实现这个效果
*/
public class Test1_adugen {
	public static void main(String[] args) {
		Thread t1 = new Thread() {
			public void run() {

					for(int i = 0;i < 5;i ++)
					{
						for(int j = 0;j < 3;j ++) {
							System.out.println("正在发送第"+(j+1)+"波动拳");
							try {
								Thread.sleep(1000);
							}catch(InterruptedException e ) {
								e.printStackTrace();
							}
						}
						System.out.println("开始为时5s的充能");
						try {
							Thread.sleep(5000);
						}catch(InterruptedException e ) {
							e.printStackTrace();
						}
					}
				}
			
		};
		t1.start();
				
	}
}

作业2:破解密码

package Multiplethread;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 1. 生成一个长度是3的随机字符串,把这个字符串当作 密码
 * 2. 创建一个破解线程,使用穷举法,匹配这个密码
 * 3. 创建一个日志线程,打印都用过哪些字符串去匹配,这个日志线程设计为守护线程
 * 提示: 破解线程把穷举法生成的可能密码放在一个容器中,日志线程不断的从这个容器中拿出可能密码,并打印出来。
 * 如果发现容器是空的,就休息1秒,如果发现不是空的,就不停的取出,并打印。
 */
public class text_mima {
	public static void main(String[] args) {
		Random r = new Random();
		String targetstr="";
		List<String> l = new ArrayList<String>();
		for(int i = 0;i < 3;i ++)//随机目标字符串
		{
			while(true)
			{
				char x = (char)r.nextInt(122);
				if(Character.isDigit(x) || Character.isAlphabetic(x))
				{
					targetstr+=x;
					break;
				}
			}
		}
		//System.out.println(targetstr);
		Thread t1 = new Thread() {
			public void run() {
				for(char i = '0';i <= 'z';i ++)
				{
					if(Character.isDigit(i) || Character.isAlphabetic(i))
					{
						for(char j = '0';j <= 'z';j ++)
						{
							if(Character.isDigit(j) || Character.isAlphabetic(j))
							{
								for(char k = '0';k <= 'z';k ++)
								{
									if(Character.isDigit(k) || Character.isAlphabetic(k))
									{
										StringBuffer buf = new StringBuffer();
										buf.append(i);
										buf.append(j);
										buf.append(k);
										l.add(buf.toString());	
										System.out.println("产生的新密码是:"+buf.toString());
									}
								}
							}
							
						}
					}	
				}
			}
		};
		t1.start();
		
		Thread t2 = new Thread(){
			public void run() {
				while(true) {
					
					if(l.isEmpty())
					{
						try {
							Thread.sleep(1000);
						}catch(InterruptedException e)
						{
							e.printStackTrace();
						}
						continue;
					}
					
					for(int i = 0;i < l.size();i ++)
					{
						File f = new File("C:/Users/msi-/Desktop/mim.txt");
						try(FileWriter fr = new FileWriter(f,true)
						){
							fr.write(l.get(i));
							System.out.println("记录的密码是:"+l.get(i));
						}catch(IOException e)
						{
							e.printStackTrace();
						}
					}

				}
			}
			
		};
		t2.setDaemon(true);
		t2.start();
	}
}
发布了58 篇原创文章 · 获赞 20 · 访问量 5216

猜你喜欢

转载自blog.csdn.net/qq_41658124/article/details/103337513