多线程执行一些细节

停止线程
-----------
1、定义循环结束标记
 .因为线程运行代码一般都是循环,只要控制了循环即可

2、使用interrupt(中断)方法
.该方法是结束线程的冻结状态,使线程回到运行状态中来

注:stop方法已经过时不再使用

创建线程方式
--------------------
1、Thread
2、Runnable{public void run();}

例子:class Man extends Person implements Runnable{ //Man虽然具备有执行功能了,但它不是线程必须newThread这个参数可以传递一个Runnable接口的对象 ———》》new Thread(new Man()).start();如果运行的话还得托付Thread函数
  public void run(){
  .................

}
}
 new Car().start();
 new Thread(new Man()).start();

sleep和监控权没有任何的关系

------------------------------------
创建线程方式二
-----------------
实现Runnable接口
1、子类覆盖安接口中的run方法
2、通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread
类的构造函数

3、Thread类对象调用start方法开启线程

思考:为什么要给Thread类的构造函数传递Runnable的子类对象?
答:用一个存在的类具备线程的功效,就不继承Thread了,只能通过其他的手段加以实现。只能实现一个Runnable接口

重写方法后才能调用父类的方法即:new一个对象后才行

-------------------------------------------------
线程安全问题
-----------
导致安全问题的出现的原因:
1、多个线程访问出现延时
2、线程随机性

注意:线程安全问题在理想状态下,不容易出现,但一旦出现对软件的影响是非常大的

-------------
同步(synchronized)

格式:
synchronized(对象){
需要同步的代码
 
}
同步可以解决安全问题的根本原因就在那个对象上。该对象如同锁定的功

同步的特点:
-------------
同步的前提:
1、同步需要两个或者两个以上的线程
2、多个线程使用的是同一个锁
未瞒足这两个条件,不能称其为同步

同步的弊端:

当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率

线程间通信
——————-

思考:wait(),notify(),notifyAll(),用来操作线程为什么定义在object类中?

答:1、这些方法存在与同步中。2、使用这些方法时必须要标识所属的同步的锁。3、锁可以是任意对象
所以任意对象调用的方法一定定义object类中。

思考2:wait(),sleep()有什么区别?
wait():释放cpu执行权,释放锁
sleep():释放cpu执行权,不释放锁
yield():等待指定的线程执行完后继续执行
notify通知去权
并发是同时执行————要考虑到线程的安全性

线程的其他方法 优先级
---------------
1、setPriority(int num)---》》优先级
2、setDaemon(booleanb)———》》守护线程 ———》如果一个程序中都是守护线程的话就会结束了
3、join()--》当子线程运行后再运行主线程,也就是使它们有序进行
4、自定义线程名称
5、toString ———》是toString方法

时间: 2024-11-03 22:07:07

多线程执行一些细节的相关文章

python之多线程执行和非线程执行的对比

一.非线程执行(普通的执行) 1.非线程运行,简单代码如下 #_*_coding:utf-8_*_ import time import threading a = [] b = [] def func1():     print "func1 start %s" % time.ctime()     alist = ["192.168.1.100","192.168.1.120","192.168.1.134","

java多线程执行问题

class Demo extends Thread{ public Demo(String name){ super(name); } public void run(){ for(int i=0; i<6; ++i){ System.out.println("i = " + i + "......Thread=" + Thread.currentThread().getName()); try{ Thread.sleep(100); }catch(Inter

关于多线程执行显示进度条的实例(转)&amp;&amp;线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。

关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 界面上2个控件,一个按钮和一个进度条using System;using System.Threading;using System.Windows.Forms; namespace WindowsFormsApplication2{    public partial class Form1 :

批处理实现多线程执行命令列表文件

批处理实现多线程执行命令列表 工作中碰到多线程执行命令列表的情况,研究一番,编写出来与大家分享.高手看了也请指点,指教一些更简单的办法. 批处理是一种单线程的简单脚本,只有上条命令执行完后,才能执行下条命令.如果上条命令执行花费很长时间,如超时,连接失败不断尝试等,下一条命令头发白了,可能还等不到它执行. 百度问答上找到一个方法可以实现多线程,原理:利用bat调用bat来实现多线程. 例如:网管希望同时ping局域中所有主机,实现方法如下. 首先,建立两个批处理文件: 1.bat文件代码如下:

java多线程执行任务,处理共享成员变量的安全问题

java多线程执行任务时,为了避免任务的重复执行,可以通过synchronized关键字处理共享成员变量,具体代码如下: // 多线程处理任务方法 private void processMultiTask(final List<LogStatTask> list, int threadCount) throws Exception { // 根据设定的线程数处理任务列表 for (int i = 0; i < threadCount; i++) { TaskThread thread

单线程和多线程执行对比—Python多线程编程

单线程和多线程执行对比 本章使用递归求斐波那契.阶乘与累加函数的执行来对比单线程与多线程: 斐波那契.阶乘与累加(mtfacfib.py): ? 1 import threading 2 from time import sleep, ctime 3 ? 4 class MyThread(threading.Thread): 5 def __init__(self, func, args, name=''): 6 threading.Thread.__init__(self) 7 self.na

Selenium_多线程执行测试用例

多线程执行测试用例 这里以百度搜索为例,通过不同的浏览器来启动不同的线程. 1 #!/usr/bin/env python 2 # _*_ coding:utf-8 _*_ 3 __author__ = 'YinJia' 4 5 from threading import Thread 6 from selenium import webdriver 7 from time import ctime,sleep 8 9 #测试用例 10 def test_baidu(browser,search

多线程执行测试用例二

计算密集型 vs. IO密集型 计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等,全靠CPU的运算能力.这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数.对于计算密集型任务,最好用运行效率高的C语言编写.也可使用python多进程,充分利用多cpu. 涉及到网络.磁盘IO的任务都是IO密集型任务,这类任务的特点是

如何控制多线程执行顺序

package com.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 如何控制多线程执行顺序 * 1.join方法,让主线程等待子线程执行完后再执行 * 2.newSingleThreadExecutor,创建执行单个任务的线程池执行.保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 */ public class ThreadFIF