当前位置: 首页 > news >正文

电子商务网站开发平台站内seo内容优化包括

电子商务网站开发平台,站内seo内容优化包括,郑州企业名单,个人备案后可以做电影网站吗基本概念 1、进程:程序的执行过程 2、线程:一个进程可以有单个线程也就是我们说的单线程,还可以有多个线程也就是我们说的多线程, 线程 1、当一个类继承了Thread类就可以当成一个线程用 2、我们会重写run方法写上我们自己的业务…

基本概念

1、进程:程序的执行过程
2、线程:一个进程可以有单个线程也就是我们说的单线程,还可以有多个线程也就是我们说的多线程,

线程

1、当一个类继承了Thread类就可以当成一个线程用
2、我们会重写run方法写上我们自己的业务逻辑
3、run Thread类实现了RUnnable接口,静态代理模式

创建一个线程为什么是start不是直接调用run方法,如果直接调用run方法并没有创建一个线程,而是串行执行,start方法中的start0方法创建一个线程是由本地方法,是由JVM调用的

当一个类他已经继承了其他类,但是我们还想让其作为线程使用的话就可以让其实现Runable接口

package threaduse;public class Thread01 {public static void main(String[] args) {Cat cat = new Cat();//没有start方法//cat.start();Thread thread = new Thread(cat);thread.start();}
}
class Cat implements Runnable
{int cnt = 0;@Overridepublic void run() {while(true){System.out.println("小狗汪汪叫hi " + (++ cnt) + Thread.currentThread().getName());try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}if(cnt == 10)   break;}}
}

多个子线程案例

package threaduse;public class Thread03 {public static void main(String[] args) {T1 t1 = new T1();T2 t2 = new T2();Thread thread = new Thread(t1);Thread thread1 = new Thread(t2);thread1.start();thread.start();}}class T1 implements Runnable
{int cnt = 0;@Overridepublic void run() {while(true){System.out.println("hello world " + (++cnt));try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}if(cnt == 10)   break;}}
}
class T2 implements Runnable
{int cnt = 0;@Overridepublic void run() {while(true){System.out.println("hi " + (++cnt));try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}if(cnt == 10)   break;}}
}

模拟售票

package ticket;//使用多线程模拟三个窗口同时售票
public class SellTicket {public static void main(String[] args) {SellTicket01 sellTicket01 = new SellTicket01();SellTicket01 sellTicket011 = new SellTicket01();SellTicket01 sellTicket012 = new SellTicket01();sellTicket012.start();sellTicket011.start();sellTicket01.start();}
}//使用继承Thread
class SellTicket01 extends Thread
{private static int num = 100;@Overridepublic void run() {while(true){if(num <= 0){System.out.println("售票结束...");break;}//休眠50mstry {Thread.sleep(50);} catch (InterruptedException e) {}System.out.println("窗口 " + Thread.currentThread().getName() +"售出一张票" + "剩余票数 = " + (-- num));}}
}

出现问题

2.png
票重复卖
3.png

这里先提出问题后续会解决啦

通知线程退出

package exit_;public class Thread_Exit {public static void main(String[] args) throws InterruptedException {T t = new T();t.start();//如果我们希望main线程去控制t线程的终止,必须可以修改loop->通知方式//休眠10sThread.sleep(10 * 1000);t.setLoop(false);}
}class T extends Thread
{int cnt = 0;//设置一个变量private boolean loop = true;@Overridepublic void run() {while(loop){try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("T还在运行" + (++ cnt));}}public void setLoop(boolean loop) {this.loop = loop;}
}

线程中断

线程的常用方法

1、start会调用run方法并且会创建一个新线程而单独调用run方法并不会创建新线程
2、interrupt,中断线程一般用于结束正在休眠的线程
3、sleep线程的休眠
3、现成的优先级
MAX、MIN、NORM

package Method;import sun.awt.windows.ThemeReader;public class ThreadMethod01 {public static void main(String[] args) throws InterruptedException {T t = new T();t.setName("阿杜");t.setPriority(Thread.MIN_PRIORITY);t.start();System.out.println(t.getName());//主线程打印5个hi,然后就中断子线程的休眠for(int i = 1; i <= 5; ++ i){Thread.sleep(1000);System.out.println("hi" + i);}t.interrupt();}
}//自定义的线程类
class T extends Thread
{@Overridepublic void run() {while(true){for(int i = 0; i < 100; ++ i){//Thread.currentThread().getName()获取当前线程的名称System.out.println(Thread.currentThread().getName() + "吃包子~~~~~" + i);}try {System.out.println(Thread.currentThread().getName() + "休眠中~~~~~");Thread.sleep(5000);} catch (InterruptedException e) {//InterruptedException捕获到一个中断异常System.out.println(Thread.currentThread().getName() + "被 interrupt了");}}}
}

线程插队

yield:线程的礼让,让出cpu让其他线程先执行,让出的时间不确定,所以也不一定能成功让出
join:线程的插队,插队一旦成功,就一定会先执行完插队的进程
join方法调用的是对方的,也就是你想让插队的那个线程的
例题
2.png

package Method;public class ThreadMethodExercise {public static void main(String[] args) throws InterruptedException {T3 t3 = new T3();Thread thread = new Thread(t3);for(int i = 1; i <= 10; ++ i){System.out.println("hi " + i);if(i == 5){thread.start();thread.join();}}}
}class T3 implements Runnable
{@Overridepublic void run() {for(int i = 1; i <= 10; ++ i){System.out.println("hello " + i);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

1.png

用户线程和守护线程

用户线程:也叫工作线程,当线程的任务执行完或以通知的形式结束
守护线程:一般是为用户线程工作的,当所有用户线程结束守护线程自动结束
常见的守护线程:垃圾回收机制
3.png

package Method;public class ThreadMethod03 {public static void main(String[] args) throws InterruptedException {MyDaemonThread myDaemonThread = new MyDaemonThread();//我们希望当主线程结束后子线程能自动结束,我们需要将子线程设置为守护线程myDaemonThread.setDaemon(true);myDaemonThread.start();for (int i = 1; i <= 10; ++i){System.out.println("阿杜在辛苦的工作");Thread.sleep(1000);}}
}class MyDaemonThread extends Thread
{@Overridepublic void run() {for(;;){try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("阿杜和阿范一直在聊天~~~~~");}}
}

4.png

线程的七大状态

6.png
5.png

线程同步

在多线程中,对一些敏感数据可能同一时刻只允许一个线程访问,为了保证数据的完整性,任何同一时刻我们都只让一个线程访问
synchronized

package syn;class SellTicket03 implements Runnable
{private static int num = 100;private boolean loop = true;public synchronized void sell(){if(num <= 0){System.out.println("售票结束。。。。");loop = false;return;}while(loop){if(num <= 0){System.out.println("售票结束...");break;}//休眠50mstry {Thread.sleep(50);} catch (InterruptedException e) {}System.out.println("窗口 " + Thread.currentThread().getName() +"售出一张票" + "剩余票数 = " + (-- num));}}@Overridepublic void run() {sell();}
}
//使用多线程模拟三个窗口同时售票
public class SellTicket {public static void main(String[] args) {SellTicket03 sellTicket03 = new SellTicket03();SellTicket03 sellTicket031 = new SellTicket03();Thread thread = new Thread(sellTicket03);Thread thread1 = new Thread(sellTicket031);thread.start();thread1.start();}
}

互斥锁

上面的同步机制就是利用了锁,当多个线程运行时,他们先争夺锁,只有获得锁的线程才能执行方法,上面的售卖票利用的就是互斥锁
1、java引入互斥锁的概念是为了保证共享数据的完整性
2、互斥锁,用关键字synchronized修饰时表明该对象在任何同一时刻只能有一个线程访问
3、同步之后因为同一时刻只有一个线程在执行,所以效率自然会降低
4、如果锁加在方法上,如果方法是静态的,锁加在类上,如果方法是非静态的,锁加在当前对象(this)上或则其他对象上(并不是很理解呜呜呜~~~~~)

互斥锁想要起作用,多个线程锁的对象必须是同一个

死锁

双方都需要当前对方所拥有的锁资源

package syn;public class DeadLock_ {public static void main(String[] args) {DeadLockDemo deadLockDemo = new DeadLockDemo(false);DeadLockDemo deadLockDemo1 = new DeadLockDemo(true);deadLockDemo1.start();deadLockDemo.start();}
}class DeadLockDemo extends Thread
{static Object o1 = new Object();static Object o2 = new Object();boolean flag;public DeadLockDemo(boolean flag) {this.flag = flag;}@Overridepublic void run() {if(flag){synchronized (o1){System.out.println(Thread.currentThread().getName() + "进入了o1");synchronized (o2){System.out.println(Thread.currentThread().getName() + "进入了o2");}}}else{synchronized (o2){System.out.println(Thread.currentThread().getName() + "进入了o2");synchronized (o1){System.out.println(Thread.currentThread().getName() + "进入了o1");}}}}
}

1.png

释放锁

释放锁
2.png
不会释放锁
3.png

http://www.fameteam.cn/news/528.html

相关文章:

  • 济南网站建设 刘彬彬网络营销工具包括
  • 网站内页标题站长工具seo综合查询访问
  • java用哪种构架做网站广告推广怎么找客户
  • wap网站的域名南宁网站建设及推广
  • 做投票链接的网站南京seo全网营销
  • 做网站好吗百度免费seo
  • 武汉百度开户代理合肥网站优化公司
  • 网站维护费用怎么收一站式网站设计
  • 网站建设目录seo优化运营专员
  • 汉语网站建设心得seo费用价格
  • 做美食类网站现状建一个网站大概需要多少钱
  • 网站关键词结构想要网站推广版
  • 人才市场网站源码百分百营销软件
  • 北京赛车pk10网站建设百度怎样免费发布信息
  • 怎么做b2c网站app拉新推广平台渠道商
  • 设计网站的操作流程怎么查权重查询
  • 怎么在360做网站青岛seo杭州厂商
  • congqin网站建设seo网站优化流程
  • 企业做可信网站认证的好处网络营销seo优化
  • 做科学实验的网站桌子seo关键词
  • 网站改版做301重定向软服业营收破334亿
  • 淄博网站建设电话咨询北京seo排名服务
  • 亲姐弟做愛电影在线网站aso优化的主要内容
  • 绿植网站怎么做百度网址提交
  • 做推广网站那里好直播营销的优势有哪些
  • 网站建设需要配置环境么热搜词工具
  • 网站建设增值税发票关键词挖掘查询工具爱站网
  • 兰州建设网站的网站优化seo报价
  • 注册建公司网站seo免费诊断电话
  • 浙江省衢州建设局网站泉州seo托管