bin:容器,执行文件和启动参数等。
help:快捷键文档和其他帮助文档
jre64:64位运行环境
lib: idea 依赖的类库
license:各个插件的许可
plugin:插件

IDEA插件官方下载地址:https://plugins.jetbrains.com/idea

https://developers.weixin.qq.com/miniprogram/dev/component/

程序、进程、线程
程序:是为完成特定任务,用某种语言编写的一组指令的集合,即指一段静态的代码,静态对象。
进程:是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程——一个生命周期。
程序是静态的,进程是动态的。
进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。
线程(thread)进程可进一步细化为线程,是一个程序内部的一条执行路径。
若一个进程同一时间并行执行多个线程,就是支持多线程的。
线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小。
多个线程,共享同一个进程中的结构:方法区、堆。
一个进程中的多个线程共享相同的内存单元、/内存地址空间——》他们从同一堆中分配对象,可以访问相同的变量和对象,这就使得线程间通信更简便,高效。但多个线程操作共享的系统资源可能就会带来安全的隐患。

并行:多个CPU同时执行多个任务,比如:多个人同时做不同的事情。
并发:一个CPU,采用时间片,同时执行多个任务,比如:秒杀,多个人做同一件事。

多线程的优点:
提高应用程序的响应,对图形化界面更有意义,可增强用户体验。
提高计算机系统CPU的利用率。
改善程序结构,

何时需要多线程
程序需要同时执行两个或多个任务。
程序需要实现一些需要等待的任务时,如用户输入,文件读写操作,网络操作,搜索等。
需要一些后台运行的程序时。

多线程的创建有两种方式:
方式一:继承Thread类
1,创建一个继承于Thread类的对象
2,重写Thread类的run()
3,创建Thread类的子类对象
4,通过此对象调用start()
class MyThread extends Thread{
@Override
public void run(){
for (int i=0;i<100;i++){
if(i %2 ==0){
syso(i)

public class ThreadTest{
public main(){//主线程
MyThread t1 = new MyThread();
t1.start();
t1.start();//会报错
改进
重新创建一个线程的对象。
MyThread t2 = new MyThread();
t2.start();

start方法的作用:此对象调用start(),作用是启动当前线程,调用当前线程的run()。
问题一:不能直接调用run()方法启动线程。
问题二:不可以让已经start()的线程去执行,会报错Ill

创建两个分线程,其中一个
public class ThreadDemo{

class MyThread1 extends{
public void run(){
for (int i=0;i<100;i++){
if(i % ==0){
syso(i)

class MyThread2 extends Thread{
public void run(){
for (int i=0;i<100;i++){
if(i % !=0){
Thread.current.getName()
syso(i)
Thread中常用的方法:
start():启动当前线程,调用当前线程的run()
run() :需要重写Thread 类中的此方法,将创建的线程要执行的操作声明在此方法中。
setName():设置当前线程的名字
getName() :获取当前线程的名字
currentThread():静态方法,返回执行当前代码的线程。
yield():释放当前CPU的执行权
join():在线程A中调用线程B的join,此时线程a就进行进入阻塞状态没直接进入阻塞直到线程b完全执行完以后,线程a才结束阻塞状态。
stop():已过时,强制结束当前线程
sleep():让当前线程睡眠,当前线程是阻塞状态。
isAlive():判断当前线程是否存活。

try{
sleep(1000);
}catch(InterruptedExcention e){
e.printStackTrace();
和try和catch连用
主线程为main换一个名字
Thread.currentThread().setName("主线程);

线程的优先级

MAX_PRIORITY =10;
MAX_PRIORITY =1;
MAX_PRIORITY =5;
如何设置当前线程的优先级
Thread.currentThread.getpriority
h1.setpriority(Thread.getPriority()获取当前线程的优先级
这个设置优先级
如何获取和设置当前线程的优先级:
getpriority():获取线程的优先级。
setpriority():设置线程的优先级。

说明:高优先级的线程要抢占低优先级线程CPU的执行权,但是只是从概率上讲:高优先级的线程高概率的情况下被执行。
创建多线程的方式二:
实现Runnable接口
1.创建一个实现Runnable接口的类
2.实现类去实现Runnable中的抽象方法:run()
3.创建实现类的对象
4. 将此对象作为参数传递给Thread类的构造器中,创建Thread类的对象。
5. 通过Thread类的对象调用start().

class NyThread implements Runnable{
    @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 mT = new MyThread();
        Thread t1 = new Thread(mT);
        t1.start();//调用Runnable类型的target的run()
        
        Thread t2 = new Thread(mT);
        t2.setName("hello");
        t2.start();
        
    }
}

//创建三个窗口买票,总票数为100张,使用实现Runable接口的方式。
class Window1 implements Runnable{
private int ticket =100;
public void run(){
while(true){
if(ticket>0){
System.out.println(Thread.currentThread().getName+":maipiao卖票,piaohao票号票号为票号为票号为"+ticket);
ticket–;
}else{
break;
}

    }
}

}

public class WindowTest1{
public static void main (String[] ar1 w1 = new Window1();
Window1 w1 = new Window1();

    Thread t1 = new Thread(w1);
    Thread t2 = new Thread(w1);
    Thread t2 = new Thread(w1);
    
    t1.setName("窗口1");
    t2.setName("窗口2");
    t3.setName("窗口3");
    
    t1.start();
    t2.start();
    t3.start();
    
    
    
}

}

两种创建线程的方式,选择哪一种。
开发中优先选择实现Runnable接口的方式。
原因: 实现的方式没有类的单继承性的局限性。
实现的方式更适合来处理多个线程有共享数据的情况。
联系:Thread类也是实现了Runnable接口。
两种方式都需要重写run()方法。

单核CPU和多核CPU,
一个Java应用程序Java.exe,至少有三个线程,main()主线程,GC垃圾回收线程,异常处理线程。
线程的分类:守护线程,用户线程。GC是守护线程。

线程的生命周期

Thread.State类中定义了线程的几种状态。
五种状态:
新建:
就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时他已经具备了运行的条件,只是没分配到CPU资源。
运行:当就绪的线程被调度并获取CPU资源时,便进行运行状态,run()方法定义了线程的操作和功能。
阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进行阻塞状态。(sleep(long time),join(),等待同步锁,wait(),suspend())
死亡:线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束。(执行完run(),调用线程的stop(),出现Error/Exception)
阻塞——就绪:sleep()时间到,join()结束,获取同步锁,notify(),resume()

P49
class Solution{
public int StrToInt(String args){
boolean isLegal = true;
boolean isNegative = false;

    int res = 0;
    for(int i=0;i<str.length();i++){
        char temp = str.charAt(i);
        if(i==0){
            if(temp == '-'){
                isNegative = true;
                continue;
            }else if(temp == '+'){
                isNegative = false;
                continue;
            }
        }
        if (temp<'0' || temp>'9'){
            isLegal = false;
            break;
        }else{
            int num = temp - '0';
            res *= 10;
            res += num;
        }
        
    }
    if(!isLegal) return 0;
    if(isNegative) return -res;
    return res;
}

}

P48题:不用加减乘除做加法
class Solution{
public int Add(int num1,int num2){
while(num2 != 0){
int temp = num1 ^ num2 ;
num2 = (num1 & num2)<<1;
num1 = temp;
}
return num1;
}
}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐